gpt4 book ai didi

c - 字符串不按照分配方式打印

转载 作者:行者123 更新时间:2023-11-30 20:51:37 26 4
gpt4 key购买 nike

在下面的代码中,我的第一个输出将返回第二个字符串和第三个字符串。

#include <stdio.h>

int bandNumber;
char colorOne[];
char colorTwo[];
char colorThree[];

int main(void) {
printf("How many bands??\n");
scanf("%d",&bandNumber);
if(bandNumber == 3) {
printf("\n\nEnter your first band color: ");
scanf("%s",colorOne);
printf("\n\nEnter your second band color: ");
scanf("%s",colorTwo);
printf("\n\nEnter your third band color: ");
scanf("%s",colorThree);
printf("\n\nBand One: %s",colorOne);
printf("\n\nBand Two: %s",colorTwo);
printf("\n\nBand Three: %s\n\n",colorThree);
}
}

谁能解释一下这些错误以及我可以采取哪些措施来纠正这些错误?

最佳答案

未检测到错误,因为编译器的警告未启用、被忽略或需要更好的编译器。此代码不会为正在读取的数据分配空间。

最简单的解决方案:使用固定大小的数组并限制用户输入。

#include <stdio.h>

int main(void) {
char colorOne[80+1];
printf("How many bands??\n");
...
printf("\n\nEnter your first band color: ");
if (1 != scanf("%80s", colorOne)) Handle_EOForIOError();
...
printf("\n\nBand One: %s",colorOne);
}

更强大的解决方案将使用fgets()。如果操作系统支持getline() ,考虑一下。

int main(void) {
char colorOne[80+1+1];
printf("How many bands??\n");
...
printf("\n\nEnter your first band color: ");
if (fgets(colorOne, sizeof colorOne, stdin) == NULL) Handle_EOForIOError();

// Delete potential ending \n
size_t len = strlen(colorOne);
if (len > 0 && colorOne[len-1] == '\n') colorOne[--len] = 0;
...
printf("\n\nBand One: %s",colorOne);
}

练习defensive coding

关于c - 字符串不按照分配方式打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28247798/

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