【发布时间】:2013-05-05 19:09:37
【问题描述】:
在这个示例程序中,为了说明strcpy() 的这种行为,我将一个字符串"S" 写入了一个更大的字符串previous,而原来的字符串"Delaware"。但是这种覆盖只影响了原来的前两个字符字符串。原始字符串的其余部分继续具有相同的值。如何处理? (即使memcpy() 似乎也可能具有相同的行为)。我的意思是,如何将剩余的字符转换为0?或者字符串中保留其原始值的其余字符没有副作用?
#include<stdio.h>
#include<string.h>
int main()
{
char previous[10]="Delaware";
printf("The character at position 4 is %c\n",previous[4]);
strcpy(previous,"S");
printf("The character at position 4 later is %c",previous[4]);
}
【问题讨论】:
-
为什么要将字符串的其余部分改为0?
-
为什么默认会这样做?它是一个字符串函数,字符串不关心空终止符之后的内容,所以大多数时候它只是浪费循环。
-
strcpy也会复制空终止符,因此如果您执行printf( "%s\n", previous) ;,它只会打印S,这假设目标足够大,也可以容纳空终止符。 -
字符串函数保证如果您的源是有效字符串,则结果是有效字符串。然而,memcpy 不是字符串函数,没有这样的保证
标签: c string memcpy strcpy null-character