strcpy vs. strcat strncpy vs. strncat

strcpy 与 strcat是两个常用的字符串处理的函数,经常可以用来给一个空的字符串赋值。

example:

char a[]="abcd";
char b[5];
strcpy(b, "");
strncpy(b, a, 4);
printf("b:%s\n", b);

上面这段代码的输出结果为:abcd烫烫

为什么在abcd之后会出现乱码呢?

查了资料之后发现strcpy(strncpy)不会自动在字符串之后添加终止符。当把strncpy换成strncat之后,程序就能正常运行了,这是因为strncat会自动添加终止符,但是这要求b有足够的size来容纳该终止符。

附:

C plus plus 网站对strncpy的描述:

Copy characters from string
Copies the first num characters of source to destination. If the end of the source C string (which is signaled by a null-character) is found before num characters have been copied, destination is padded with zeros until a total ofnum characters have been written to it.

No null-character is implicitly appended at the end of destination if source is longer than num. Thus, in this case,destination shall not be considered a null terminated C string (reading it as such would overflow).

destination and source shall not overlap (see memmove for a safer alternative when overlapping).

C plus plus 网站对strncat的描述:

Append characters from string
Appends the first num characters of source to destination, plus a terminating null-character.

If the length of the C string in source is less than num, only the content up to the terminating null-character is copied.

 

 

 

posted @ 2013-06-03 15:26  菜鸟的世界  阅读(674)  评论(0编辑  收藏  举报