在C中使用数组[100]时出错
我是一个C语言的初学者。我试图在code::Blocks和Ideone中运行这段代码,但两者都给了我相同的运行时错误。我尝试将在C中使用数组[100]时出错,c,arrays,char,initialization,switch-statement,C,Arrays,Char,Initialization,Switch Statement,我是一个C语言的初学者。我试图在code::Blocks和Ideone中运行这段代码,但两者都给了我相同的运行时错误。我尝试将arr[100]更改为arr[101],令人惊讶的是,代码运行了。我还担心poo[t]的初始化,因为它似乎没有存储sum的值。或者,sum保留值0(可能是switch语句不允许char情况吗?) #包括 #包括 int main() { int arr[100],t,poo[t],i,j,sum;//参考孔 scanf(“%d”、&t); 对于(i=0;i这条线 int
arr[100]
更改为arr[101]
,令人惊讶的是,代码运行了。我还担心poo[t]
的初始化,因为它似乎没有存储sum
的值。或者,sum
保留值0
(可能是switch
语句不允许char
情况吗?)
#包括
#包括
int main()
{
int arr[100],t,poo[t],i,j,sum;//参考孔
scanf(“%d”、&t);
对于(i=0;i这条线
int arr[100], t, poo[t], i, j, sum; // refer HOLES
不好,因为t
在使用前未初始化
如果您真的想使用VLA
,请这样做
int t;
scanf("&d", t);
int poo[t];
这条线
int arr[100], t, poo[t], i, j, sum; // refer HOLES
不好,因为t
在使用前未初始化
如果您真的想使用VLA
,请这样做
int t;
scanf("&d", t);
int poo[t];
如果arr
是一个字符串,则应将其声明为char
数组:
char arr[100];
scanf("%s", arr);
char arr[100];
“我还担心poo[t]
的初始化问题。”
你应该是。以下声明:
int t, poo[t];
scanf("%d", &t);
使用单位化变量t
调用未定义的行为
在t
正确初始化后声明poo
:
int t = 0;
scanf("%d", &t);
int poo[t];
如果arr
是一个字符串,则应将其声明为char
数组:
char arr[100];
scanf("%s", arr);
char arr[100];
“我还担心poo[t]
的初始化问题。”
你应该是。以下声明:
int t, poo[t];
scanf("%d", &t);
使用单位化变量t
调用未定义的行为
在t
正确初始化后声明poo
:
int t = 0;
scanf("%d", &t);
int poo[t];
这里的问题之一是这一行:
scanf("%s", arr);
请注意,arr
声明为
int arr[100];
这意味着您正在读取一个字符串(一系列char
s)转换为整数数组。这不会导致每个整数包含一个字符;相反,整数的字节将使用字符值填充。因此,当您迭代数组的元素时,将不会返回像\0
这样的干净值
要解决此问题,请更改arr
的声明,使其成为char
数组:
char arr[100];
scanf("%s", arr);
char arr[100];
这里可能还有其他问题,但这肯定是您需要解决的问题
希望这有帮助!这里的问题之一是这行:
scanf("%s", arr);
请注意,arr
声明为
int arr[100];
这意味着您正在读取一个字符串(一系列char
s)转换为整数数组。这不会导致每个整数包含一个字符;相反,整数的字节将使用字符值填充。因此,当您迭代数组的元素时,将不会返回像\0
这样的干净值
要解决此问题,请更改arr
的声明,使其成为char
数组:
char arr[100];
scanf("%s", arr);
char arr[100];
这里可能还有其他问题,但这肯定是您需要解决的问题
希望这有帮助!您应该将poo[t]
放在读取数组实际大小的scant
之后。您应该将poo[t]
放在读取数组实际大小的scant
之后。poo[t]
是一个可变长度数组,在C99中有效。若要使用VLA,您必须为t
poo[t]
是一个可变长度数组,在C99中有效。若要使用VLA,您必须为t指定一个值。当程序崩溃时,您向程序提供了什么输入?我认为问题在于poo[t]的初始化.t是非常量,数组声明需要常量值。是否输入100个字符长(或更长)的文本?在这种情况下,它将中断。无论如何,您应该使用更安全的输入代码。老实说,我不明白这个poo[t],静态分配应该是静态的。100个字符长的文本适合101数组(因为您必须添加字符串的\0终止符)。当程序崩溃时,您将向程序提供什么输入?我认为问题在于poo[t]的初始化。t是非常量,数组声明需要常量值。是否向其提供100个字符长(或更长)的文本?在这种情况下,它将中断。无论如何,您应该使用更安全的输入代码。老实说,我不明白这个poo[t],静态分配应该是静态的。100个字符长的文本适合101数组(因为您必须添加字符串的\0终止符).建议修复:如果您有t的上限,即t建议修复:如果您有t的上限,即t