h-b-z-d-j-s-m 发表于 2022-9-15 15:59:30

字符串赋值

下面能正确进行字符串赋值操作的是
A、 char s={"ABCDE"};
B、 char s={'A','B','C','D','E'};
C、 char *s;
      s="ABCDE";
D、 char *s;
       scanf("%s",s);
这题应该选B还是C啊,其他错的又是哪儿错了啊

gandixiwang 发表于 2022-9-15 16:05:04

B

人造人 发表于 2022-9-15 16:05:17

c正确
a和b不是字符串
d没有给s分配空间

gandixiwang 发表于 2022-9-15 16:07:29

本帖最后由 gandixiwang 于 2022-9-15 16:08 编辑

哦对,漏看题目了

howzyao 发表于 2022-9-15 21:31:50

B、 char s={'A','B','C','D','E'};
C、 char *s;
      s="ABCDE";
D、 char *s;
       scanf("%s",s);

这些都对

howzyao 发表于 2022-9-15 21:35:03

A、 char s={"ABCDE"};

也对,但总觉得没有'\0'
输出会不会出乱码? cout << s<<endl;

临时号 发表于 2022-9-15 22:51:37

只有C是正确的
字符串在C语言的定义是以'\0'结尾的字符数组
A.由于ABCDE本身就具有5个字符,导致剩下来的'\0'没有地方放,所以这只能算字符数组,不能算作字符串
B.没有以'\0'结尾,所以这只能算字符数组,不能算作字符串
D.没有给s分配内存空间

howzyao 发表于 2022-9-16 07:35:45

嗯,有道理,结尾确实很重要。最后一个,没有分配空间的,无法接受多余的,输入一排字符,首地址

howzyao 发表于 2022-9-16 07:37:00

char *s,指针是4字节,加后面的3字节,会不会支持存放3个字节长度的输入?

howzyao 发表于 2022-9-16 07:37:33

我速度起来试试,等我提交结果

howzyao 发表于 2022-9-16 07:46:32

嗯,这char *s和数组不一样,确实不存在首地址的概念,s就是一个 没有空间的 纯指针,楼主是正确的! 我试了,无法接受任何输入.

howzyao 发表于 2022-9-16 07:59:01


试了一下发图,不能访问
页: [1]
查看完整版本: 字符串赋值