strncpy修改程序的行为

时间:2014-03-31 15:21:20

标签: c string strncpy

考虑,

int main()
{
 char s[10];
 strncpy(s,"hello",5);
 printf("Hello !!%s %d\n",s,strlen(s));
 return 0;
}

当我运行此程序时,没有打印任何内容。但是当我对strncpy的调用进行评论时,会打印出“Hello !! 0”。

使用了ideone(“http://ideone.com/j1cdKp”)

当我使用gcc编译器(Debian 7.4)时,它给出了预期的输出(“Hello !! hello 6”)。

任何人都可以解释这种行为吗?

-Newbie

2 个答案:

答案 0 :(得分:2)

您的程序会导致未定义的行为。 s未初始化,strncpy(s,"hello",5);不会复制足够的字符以包含空终止符。

答案 1 :(得分:2)

第1部分

此代码导致未定义的行为,因为您尝试打印未初始化的字符串s

char s[10];
printf("Hello!! %s %d\n",s,strlen(s));

第2部分

此代码导致未定义的行为,因为您尝试打印非空终止的字符串。带有参数的strncpy将复制“hello”,但不会复制尾随的null终止符。

char s[10];
strncpy(s,"hello",5);
printf("Hello!! %s %d\n",s,strlen(s));

第3部分

以下代码是正确的。请注意,strncpy的参数为 6

char s[10];
strncpy(s,"hello",6);
printf("Hello!! %s %d\n",s,strlen(s));