当前位置: 代码迷 >> C语言 >> 对strncpy && strncat 有些不解,望赐教
  详细解决方案

对strncpy && strncat 有些不解,望赐教

热度:176   发布时间:2008-02-15 22:22:28.0
对strncpy && strncat 有些不解,望赐教
假设有两个字符串,str1和str2,姑且设str1为目的字符串,str2为源字符串.
设它们的内容为
char str1[10] = {'L','o','v','e','\0','a','b','c','d','e'};
即为: Love\0abcde
char str2[10] = "hate";
即为: hate\0\0\0\0\0\0

此时应用strncat(str1,str2,3);
结果str1为: Lovehat\0de;
红色部分(\0)是这个strncat()函数自动添加的;

若应用strncpy(str1,str2,3);
结果str1为: hate\0\0\0\0\0\0
红色部分(hat)后并未自动添加\0;

对于以上理解,不知对不对,望赐教

[[it] 本帖最后由 wubizao 于 2008-2-15 22:27 编辑 [/it]]
搜索更多相关的解决方案: strncat  strncpy  amp  字符  

----------------解决方案--------------------------------------------------------
咋没有哪位同志指教下?
----------------解决方案--------------------------------------------------------
strncpy没有自动添加截至符的功能
如果想要加截至符必须要str1[3] = '\0';
----------------解决方案--------------------------------------------------------
《C Primer Plus(第五版)中文版》中有这2个函数的说明

你看的不是第五版吗?

/* 以下是我看书时记录下的 */
strcpy()   接受2个字符串参数,把第二个字符串拷贝到第一个字符串(类似于赋值) (string copy)
           第一个参数为目标(target)字符串,第二个字符串为源(source)字符串,
           把源复制到目标。返回第一个参数的值。第一个参数不需要指向数组的开始。

strncpy()  比strcpy() 多一个参数,第三个参数,第三个参数指明最大可复制的字符数。
           函数结束后。在源字符串的最后一个字符赋'\0',以确保这个字符串可靠。

strcat()   接受两个字符串参数,把第二个字符串拷贝添加到第一个字符串,
           返回第一个字符串中第一个字符的地址 (string concatenation)
           不检查第一个数组是否能够容纳第二个字符串

strncat()  和 strcat() 一样,但比它多一个参数,第三个参数为添加的字符数
           MAX - strlen(str1) - 1
----------------解决方案--------------------------------------------------------
顶一下
----------------解决方案--------------------------------------------------------
是第四版,图书馆借的
不过内容差不多
看第二遍才发现了,书读白遍其意自现啊
书上写道:
char * strncat(char * s1, const char * s2, size_t n);
s2字符串中前n歌字符被追加到s1的字符串,s2中的空字符及其后的任何字符都不
会被复制,并且追加一个空字符到所得结果后面.
自己看书太马虎了,谢谢了啊
----------------解决方案--------------------------------------------------------