c中的字符串自动连接 struct flight\u列表{ char-fcode[4]; 南京市; 细度; 国际时间; int持续时间; }; 无效添加航班(string20城市[],结构航班列表航班到达[]){ int i,j; 整数检查; 字符飞行[MAX]; string20 src; 第20条选择; 系统(“cls”); 做{ while(strcmp(航班到达[i].fcode,“”)=0) i++; 做{ 检查=0; printf(“航班代码:”); scanf(“%s”,航班); 航班[4]='\0'; strcpy(航班到达[i].fcode,航班); 对于(j=0;j

c中的字符串自动连接 struct flight\u列表{ char-fcode[4]; 南京市; 细度; 国际时间; int持续时间; }; 无效添加航班(string20城市[],结构航班列表航班到达[]){ int i,j; 整数检查; 字符飞行[MAX]; string20 src; 第20条选择; 系统(“cls”); 做{ while(strcmp(航班到达[i].fcode,“”)=0) i++; 做{ 检查=0; printf(“航班代码:”); scanf(“%s”,航班); 航班[4]='\0'; strcpy(航班到达[i].fcode,航班); 对于(j=0;j,c,arrays,string,struct,linked-list,C,Arrays,String,Struct,Linked List,否!flight\u arr[i]。fcode可容纳4个字符;flight[4]是第5个字符 不!flight\u arr[i]。fcode有4个字符的空间;flight[4]是第5个字符。我想你不理解PMG的答案。他是对的。如果你声明了char fcode[4],你就无法访问flight[4];因为它只有0到3个点。没有第5个点。实际上,您正在滑动到与您所指的内存不同的内存。在C中,字符串应声明为包含+1的字符串大小(NULL)。因此,如果我想创建一个包含“Hello”(Hello本身是5个

否!
flight\u arr[i]。fcode
可容纳4个字符;
flight[4]
是第5个字符



不!
flight\u arr[i]。fcode
有4个字符的空间;
flight[4]
是第5个字符。

我想你不理解PMG的答案。他是对的。如果你声明了
char fcode[4],你就无法访问
flight[4]
因为它只有0到3个点。没有第5个点。实际上,您正在滑动到与您所指的内存不同的内存。在C中,字符串应声明为包含+1的字符串大小(NULL)。因此,如果我想创建一个包含“Hello”(Hello本身是5个字母)的字符串,我会这样声明:

        scanf("%s",flight);
        flight[4] = '\0';
        strcpy(flight_arr[i].fcode,flight);
然后,大小将由文本字符串输入确定-它是6,而不是5,因为它需要另一个空空间。
顺便说一句-
scanf(“%s”)
自动以NULL结束字符串输入-正如
get
所做的那样-但我建议使用
fgets()
这种方法
fgets(StringInput,StringSize,stdin);
在您的情况下
fgets(flight,4,stdin)
就这样。

我想你不明白PMG的答案。他是对的。如果你声明了
字符代码[4],你就不能进入
航班[4]
因为它只有0到3个点。没有第5个点。实际上,您正在滑动到与您所指的内存不同的内存。在C中,字符串应声明为包含+1的字符串大小(NULL)。因此,如果我想创建一个包含“Hello”(Hello本身是5个字母)的字符串,我会这样声明:

        scanf("%s",flight);
        flight[4] = '\0';
        strcpy(flight_arr[i].fcode,flight);
然后,大小将由文本字符串输入确定-它是6,而不是5,因为它需要另一个空空间。
顺便说一句-
scanf(“%s”)
自动以NULL结束字符串输入-正如
get
所做的那样-但我建议使用
fgets()
这种方法
fgets(StringInput,StringSize,stdin);
在您的情况下
fgets(flight,4,stdin)
就是这样。

什么是
string20
?什么是
MAX
?顺便说一句,你的代码中有:记住局部变量没有初始化,使用未初始化的变量会导致未定义的行为。你从不初始化索引变量
i
。thaks@JoachimPileborg解决了我的问题,非常感谢!什么是
string20
?什么是
MAX
?顺便说一下,你的代码中有:记住局部变量没有初始化,未初始化使用它们会导致未定义的行为。你从不初始化索引变量
i
。thaks@JoachimPileborg解决了我的问题,非常感谢!它必须只有4个字符:)这就是为什么我在第5个字符上加了null,但这并不能解决任何问题,问题是“ABCD”不适合
flight\u arr[i].fcode
。字符串终止符需要空间。@PNC它是四个字符加上终止符,所以数组必须有五个字符大。如果它们只包含四个字符的空间,而您写入到第五个字符,那么第五个字符将在哪里结束?它必须只有四个字符:)这就是为什么我在第五个字符上加上null,这不正确我有什么问题吗?对不起,问题是“ABCD”不适合
flight\u arr[i].fcode
。字符串终止符需要空间。@PNC是四个字符加上终止符,所以数组必须是五个字符大。如果它们只包含四个字符的空间,而您写入到第五个字符,那么第五个字符将在哪里结束?
        scanf("%s",flight);
        flight[4] = '\0';
        strcpy(flight_arr[i].fcode,flight);
char mystr[] = "Hello";