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.