我在复习准备考试,我需要一些字符串方面的帮助
假设下面的声明,并进一步假设string.h为uncluded
char rocky[21], bw[21], boris[21];
int result;a.)编写一条scanf语句,该语句可以将字符串Beauregard读入rocky
我的answer= scanf("%s", &rocky);
b.)假设标准输入行上的唯一内容是文本Beauregard,使用scanf的替代方法编写一条语句来读取文本并将其存储在rocky中
my answer= gets (Beauregard); strcpy(rocky);
c.)假设读入的文本是Beauregard,那么在执行下面的语句后,result的值是多少?
result=strlen(rocky); 我的answer=我不知道..
d.)下面的语句做了什么?
strcpy(boris, rocky);answer=复制了字符串..(不知道更多)
e.)下面的语句做了什么?rocky和bw的价值是什么?
strncpy(bw,rocky,3);我的answer=没有线索
非常感谢您的帮助,解释一下也会有所帮助:)
谢谢!
发布于 2011-05-03 10:02:03
a.在C中,数组和指针密切相关。具体地说,数组的名称衰减为指向数组第一个元素的指针,因此您的答案应该是
scanf("%s", rocky); /* note the lack of an & in front of rocky */b. gets(Beauregard)没有真正的意义。gets函数从标准输入(比如“键盘”)中读取一个字符串,并将其存储在传递给它的参数所指向的字符数组中。因此,您应该假设用户将输入"Beauregard",并且您应该使用以下命令将其读入rocky数组
gets(rocky);strlen返回字符串的长度,不包括尾随的\0字符,因此在本例中为10。
D.strcpy只是将rocky数组的内容复制到boris数组中,所以它们都应该包含“strcpy”。
E.strncpy与strcpy类似,但只复制最多n个字符(其中n是最后一个参数,因此在本例中,bw将包含"Bea“,没有终止空字符。
请注意,在任何实际的程序中,其中几个语句都是非常糟糕的想法。例如,从不使用gets的理由,因为任何gets的使用都会暴露出安全缺陷。你应该总是使用fgets 。如果您指定了宽度,就可以安全地使用scanf函数,但是您在这里还没有这样做。我提到了这些东西,以防你的老师已经讲过了,而你却忘记了。
发布于 2011-05-03 09:56:46
strlen返回C字符串的长度。strlen("Beauregard");将返回10,因为字符串长度为10个字符。
strcpy只是复制一个字符串,你是对的。
strncpy允许您指定所需的最大字符数。因此,如果您传递3,您将得到3个字符和字符串末尾的空终止符。
发布于 2011-05-03 10:00:39
strlen( rocky )将返回rocky所指向的字符串长度。组成“Beauregard”的字母数。
strncpy( bw,rocky,3)将rocky指向的字符串中的前3个字母复制到bw中。
您应该阅读strlen、strcpy和strncpy的手册页。
https://stackoverflow.com/questions/5864278
复制相似问题