【发布时间】:2010-11-18 12:23:33
【问题描述】:
编辑:我已经添加了示例的源代码。
我遇到了this example:
char source[MAX] = "123456789";
char source1[MAX] = "123456789";
char destination[MAX] = "abcdefg";
char destination1[MAX] = "abcdefg";
char *return_string;
int index = 5;
/* This is how strcpy works */
printf("destination is originally = '%s'\n", destination);
return_string = strcpy(destination, source);
printf("after strcpy, dest becomes '%s'\n\n", destination);
/* This is how strncpy works */
printf( "destination1 is originally = '%s'\n", destination1 );
return_string = strncpy( destination1, source1, index );
printf( "After strncpy, destination1 becomes '%s'\n", destination1 );
产生了这个输出:
destination 原来是 = 'abcdefg' strcpy 后,destination 变为 '123456789' destination1 最初是 = 'abcdefg' strncpy 后,destination1 变为 '12345fg'
这让我想知道为什么有人会想要这种效果。看起来会很混乱。这个程序让我觉得你基本上可以用 Tom Bro763 复制某人的名字(例如 Tom Brokaw)。
使用strncpy()优于strcpy()有什么优势?
【问题讨论】:
-
我想你的意思是问“为什么会有人使用
strcpy而不是strncpy?” -
当我是第一学期 C 编程课程的助教时,我向我的学生保证,当我根据精心设计的输入对它们进行评分时,任何使用像
getline这样的方法都会导致错误的结果。 :) -
真的很遗憾 C 从来没有一个像样的字符串标准库。
-
这没什么好可惜的。我的意思是,它完全打破了我,让高级语言变得更有趣:)
标签: c buffer-overflow strcpy c89 strncpy