我正在读考试,我需要一些字符串帮助
假设以下声明,并进一步假设string.h未被包含
char rocky[21], bw[21], boris[21];
int result;
a。)编写一个scanf语句,使字符串Beauregard能够被读入岩石
我的回答= scanf("%s", &rocky);
b。)假设文本Beauregard是标准输入的唯一内容,写一个语句来阅读文本并使用scanf的替代方法将其存储在岩石中
我的回答= gets (Beauregard);
strcpy(rocky);
c。)假设读入的文本是Beauregard,执行以下语句后结果的值是多少?
result=strlen(rocky);
我的回答=我不知道......
d。)以下声明的作用是什么?
strcpy(boris, rocky);
answer =制作字符串的副本..(不知道更多)
e。)以下声明的作用是什么? rock和bw的价值是什么?
strncpy(bw,rocky,3);
我的回答=不是线索
非常感谢帮助,解释也会有所帮助:)
谢谢!
答案 0 :(得分:1)
strlen
返回C字符串的长度。 strlen("Beauregard");
将返回10
,因为字符串长度为10个字符。
strcpy
只是复制一个字符串,你是对的。
strncpy
允许您指定所需的最大字符数。因此,如果你传递它3
,你将在你的字符串末尾获得3个字符和空终结符。
答案 1 :(得分:1)
一个。数组和指针在C中密切相关。特别是,数组的名称衰减到指向数组的第一个元素的指针,所以你的答案应该是
scanf("%s", rocky); /* note the lack of an & in front of rocky */
湾gets(Beauregard)
没有任何意义。 gets函数从标准输入读取一个字符串(想想,“键盘”)并将其存储在您传递它的参数指向的字符数组中。因此,您应该假设用户将键入“Beauregard”,您应该将其读入rocky
数组
gets(rocky);
℃。 strlen返回字符串的长度,不包括尾随\0
字符,所以在这种情况下,10。
d。 strcpy只是将岩石阵列的内容复制到boris数组中,因此它们都包含“Beauregard”。
即strncpy的工作方式类似于strcpy,但只复制最多n个字符(其中n是最后一个参数,因此在这种情况下,bw将包含“Bea”而没有终止空字符。
请注意,其中一些陈述在任何真实程序中都是非常糟糕的想法。例如,使用get的永远是一个理由,因为任何使用get都会打开安全漏洞。您应始终使用fgets。如果指定宽度,则可以安全地使用scanf函数,但这里没有这样做。我提到这些事情是为了万一你的老师已经覆盖了你并且你已经忘记了。
答案 2 :(得分:0)
strlen(rocky)将返回rock指向的字符串长度。组成'Beauregard'的字母数。
strncpy(bw,rocky,3)将岩石指向的字符串中的前3个字母复制到bw中。
您应该阅读strlen,strcpy和strncpy的手册页。
答案 3 :(得分:0)