在C中使用数组[100]时出错

在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

我是一个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], 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