VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 812|回复: 14

[求助] 字符串数组指针问题以及字符串初始化问题

[复制链接]
07_avatar_middle
在线会员 Acher陈 发表于 2018-2-11 14:44:15 | 显示全部楼层 |阅读模式
3驿站币
对字符串指针方式:
char *ps="computer";
也可以写为:
char *ps;
ps="computer";
而对数组方式时:
char str[]={"computer"};
为什么不能写为:
char str[50];
str={"computer"};


这个问题我也试了一下字符串数组的定义,
#include <stdio.h>
void main()
{
        char str[10];
        str[10] = { 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r' };
        printf("%s", str);

}
然而这种形式的定义就不行呢?

最佳答案

查看完整内容

定义格式: char *pc=”string!”; char s[ ]=”string!”; /*定义时可以!*/ 赋值: pc=”string!”; /*指针可以在运算中赋值*/ s=”string!”; /*数组不允许*/ 注意: ※字符指针在运算过程中可以用上面的方式赋值,但是用scanf或gets这类函数从键盘获取字符串时,一定要令其先指向某个数组。 如:scanf(“%s”,pc),运行时会报错, ※可以通过移动指针指向串中某个字符,如: printf(“%c” ...




上一篇:字符转换问题
下一篇:C++字符串字面值常量

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

07_avatar_middle
在线会员 冥蝶 发表于 2018-2-11 14:44:16 | 显示全部楼层
定义格式:
char *pc=”string!”;
char s[ ]=”string!”;     /*定义时可以!*/
赋值:
pc=”string!”;                  /*指针可以在运算中赋值*/
s=”string!”;              /*数组不允许*/

注意:
※字符指针在运算过程中可以用上面的方式赋值,但是用scanf或gets这类函数从键盘获取字符串时,一定要令其先指向某个数组。
如:scanf(“%s”,pc),运行时会报错,

※可以通过移动指针指向串中某个字符,如:
printf(“%c”,*(pc+2));
会输出r

※双引号也是一种运算符,它会求出一串字符的首地址。上面的”string!”相当于用&求出’s’的地址赋值给pc。用printf只能输出's',而不是整个字符串"string!"
※字符数组(字符串)初始化,系统会自动按顺序填充数组元素。平时运行时不能用=号给数组赋值,因为数组名是只读的。

以上可以输入代码试运行一下就明白了。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

73_avatar_middle
在线会员 变形金刚 发表于 2018-2-11 14:53:34 | 显示全部楼层
会不会因为你定义了数组项目数为50个,却没有等于50个?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

87_avatar_middle
在线会员 xiaotao701 发表于 2018-2-11 15:51:02 来自手机 | 显示全部楼层
数组不能直接赋值

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

01_avatar_middle
online_admins admin 发表于 2018-2-11 22:21:17 | 显示全部楼层
数组的名字就是数组的首地址,但他的指向是不能被改变的,所以你那种赋值方式是不行的。数组的名字可以理解为是一个:char * const 类型,无法改变指向!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

88_avatar_middle
online_vip wyc2008 发表于 2018-2-12 10:40:18 | 显示全部楼层
char *ps;
ps="computer";  这个方式你确定行?
应该是 const char* ps   ps = "computer" 吧 ,数组的话牵扯数组退化为指针,并且退化后的指针是指针常量,常量变量必须通过初始化的方式 不能进行赋值 自然你的那个赋值不行了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

07_avatar_middle
ico_lz  楼主| Acher陈 发表于 2018-2-12 12:51:35 | 显示全部楼层
变形金刚 发表于 2018-2-11 14:53
会不会因为你定义了数组项目数为50个,却没有等于50个?

定义数组可以只定义一部分的。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

07_avatar_middle
ico_lz  楼主| Acher陈 发表于 2018-2-12 12:57:28 | 显示全部楼层
wyc2008 发表于 2018-2-12 10:40
char *ps;
ps="computer";  这个方式你确定行?
应该是 const char* ps   ps = "computer" 吧 ,数组的话 ...

对的,我确定可以这样进行赋值。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

07_avatar_middle
ico_lz  楼主| Acher陈 发表于 2018-2-12 13:06:17 | 显示全部楼层
admin 发表于 2018-2-11 22:21
数组的名字就是数组的首地址,但他的指向是不能被改变的,所以你那种赋值方式是不行的。数组的名字可以理解 ...

好的,意思是,我在内存中定义了一个包含十个元素的char型数组,然后这个数组的内存地址在这个生命周期内他的地址都是不改变的,我要对这个数组进行赋值操作的话,可以选择刚开始的时候进行赋值或者是对每一个(比如arr[0]='a',arr[1]='b')这样的进行赋值操作。像开始我的问题里面那样的定义是相当于  char arr[]="com"; char str[10];  str=arr;  是这个原因吗?   

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

73_avatar_middle
在线会员 变形金刚 发表于 2018-2-12 16:05:15 | 显示全部楼层
Acher陈 发表于 2018-2-12 12:51
定义数组可以只定义一部分的。

    谢谢!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

07_avatar_middle
在线会员 冥蝶 发表于 2018-2-13 08:50:25 | 显示全部楼层
char str[50];
str={"computer"};
数组名str,其实也是一个指针,但它是一个只读指针,故不能赋值。所有数组名都是一个只读指针,作用读取后面字符串内容。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

07_avatar_middle
ico_lz  楼主| Acher陈 发表于 2018-2-13 14:29:51 | 显示全部楼层
冥蝶 发表于 2018-2-13 09:09
定义格式:
char *pc=”string!”;
char s[ ]=”string!”;     /*定义时可以!*/

好的,非常感谢。最近这个是把我搞得有点头晕转向的。非常感谢啦

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

59_avatar_middle
在线会员 fangting1989 发表于 2018-2-15 11:28:09 | 显示全部楼层
数组的名字就是数组的首地址,但他的指向是不能被改变的,所以你那种赋值方式是不行的。数组的名字可以理解为是一个:char * const 类型,无法改变指向!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

07_avatar_middle
ico_lz  楼主| Acher陈 发表于 2018-3-1 15:11:43 | 显示全部楼层
fangting1989 发表于 2018-2-15 11:28
数组的名字就是数组的首地址,但他的指向是不能被改变的,所以你那种赋值方式是不行的。数组的名字可以理解 ...

好的,谢谢啦。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-15 20:53

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表