c - 由 strncpy 修改的程序的行为



>考虑,

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

当我运行这个程序时,不会打印任何内容。但是当我评论对 strncpy 的调用时,它打印"你好!0"。

使用的 ideone ("http://ideone.com/j1cdKp")

当我使用 gcc 编译器(Debian 7.4)时,它给出了预期的输出("你好!你好6")。

谁能解释这种行为?

-新手

1 部分

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

char s[10];
printf("Hello!! %s %dn",s,strlen(s));

第 2 部分

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

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

第 3 部分

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

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

程序会导致未定义的行为。 s是非初学者化的,并且strncpy(s,"hello",5);不会复制足够的字符来包含 null 终止符。

相关内容

  • 没有找到相关文章

最新更新