C 字符串不会按照其分配方式打印
在下面的代码中,我的第一个输出返回第二个字符串和第三个字符串C 字符串不会按照其分配方式打印,c,string,C,String,在下面的代码中,我的第一个输出返回第二个字符串和第三个字符串 #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) { print
#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);
}
}
#包括
整数带数;
炭色酮[];
char-colorTwo[];
三种颜色[];
内部主(空){
printf(“有多少条带?”\n”);
scanf(“%d”、&bandNumber);
如果(带数==3){
printf(“\n\n输入您的第一个波段颜色:”;
扫描频率(“%s”,彩色);
printf(“\n\n输入第二个波段颜色:”);
扫描频率(“%s”,彩色二);
printf(“\n\n输入第三个色带颜色:”);
扫描频率(“%s”,彩色三);
printf(“\n\n带一个:%s”,彩色一个);
printf(“\n\n带两个:%s”,颜色二);
printf(“\n\n带三个:%s\n\n”,彩色三个);
}
}
有人能解释这些错误吗?我能做些什么来纠正它们
char colorOne[];
不带大小的数组只能与此声明一起使用,如
char colorOne[] = "someString";
Else char arraycolorone
无法计算数组的大小并存储扫描的字符串。所以这应该有初始值设定项
否则,您可以使用VLA(由C99支持),如
而且总是有动态内存分配
char *colorOne = malloc(sizeof(char) * N);
未检测到错误,因为编译器的警告未启用、被忽略或需要更好的编译器。此代码不为正在读取的数据分配空间 最简单的解决方案:使用固定大小的数组并限制用户输入
#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);
}
练习
char colorOne[]代码>。您确定您的代码编译时没有错误吗?编译器会显示警告。声明无限制字符串的更好方法是什么?代码不能“声明无限制字符串”。代码可以声明指向char
的指针。它是有效的声明,即使不是定义。链接器应该抱怨缺少符号。
#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);
}
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);
}