gpt4 book ai didi

Windows 和 Linux 下的 C 代码

转载 作者:行者123 更新时间:2023-11-30 18:55:14 25 4
gpt4 key购买 nike

谁能告诉我为什么这段代码可以在 Windows 中运行而不能在 Linux 中编译?

#include <stdio.h>

main()
{

char myname[10];
printf("Please Enter your name:");
scanf("%s",&myname);
printf("Welcome %s\n",myname);
strcpy(myname,"DefaultName");
printf("so your name now is %s\n",myname);
}

我在windows下使用Dev c++来编译。我在linux中使用gcc或g++来编译。

那是哪里出了问题?
谢谢!

最佳答案

你必须记住,C 中的字符串实际上没有长度,因此它使用一个特殊字符来告诉字符串的结尾,即所谓的“空”字符 ('\0')。

因此,如果您有一个包含 10 个字符的数组,它只能容纳一个包含 9 个字符的字符串,因为终止符也必须有空间。

字符串“DefaultName”12个字符,包括字符串终止符,当您将其复制到数组时,您将超出数组的限制,并且这导致 undefined behavior 。如果将数组的大小增加两个字符,则该字符串将适合,但它只能适合十一个(不包括终止符)个字符或更少的字符串。

旁注:字符串文字"DefaultName"实际上是一个指向十二个字符的常量数组的指针,其内容为"DefaultName\0"

另一个旁注:数组会衰减为指向其第一个元素的指针,因此在将数组传递给函数时,您不必在数组上使用 & 运算符。事实上,我认为在传递应该保存字符串作为函数参数的变量时使用地址运算符是一个坏习惯。原因是,当你用 C 语言编程时,你通常会处理指针而不是数组,如果你错误地在指针上使用了地址运算符,你将再次出现未定义的行为,然后你通过指向指针的指针。

关于Windows 和 Linux 下的 C 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28236326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com