(windows)DevC++ GCC 编译器挂起或打印无限字符
(windows) DevC++ GCC compiler hangs up or prints infinite characters
我正在尝试编写一些 C 代码,当 运行 以下内容时,我的编译器在打印 'A' 后突然终止。为什么?
//report expected thing
void Expected(char *s){
int i=0;
int n = sizeof(s)/sizeof(s[0]);
while (i< n)
printf ("%c", s[i]);
printf(" expected.\n");
}
int main(int argc, char *argv){
printf("%c",65); //after this compiler hangs and asks for exit abnormally
char *Arr ={'a'};
Expected(Arr);
return 0;
}
此外,如果我输入
char *Arr ={"a"}; //note the double quotes
然后它开始打印出无数个“a”。为什么会发生这种情况?
int n = sizeof(s)/sizeof(s[0]);
不是如何获取数组的长度,该数组的指针作为参数传递指向第一个元素。
如果您想让您的函数知道,请传递数组的大小。
char *Arr ={'a'};
不好,因为'a'
是一个整数,你把它转换成一个指针,那么结果就不太可能是一个有效的指针。
char *Arr ={"a"};
是可以的,因为它是一个有效的指针,但是它将是无限循环,因为i
在while
循环中没有更新。
main()
函数的类型是实现定义的。你应该使用标准类型,除非你有一些理由使用特殊的 main()
.
你的代码应该是这样的:
#include <stdio.h>
//report expected thing
void Expected(const char *s, size_t n){ /* add const because the contents of array won't be modified */
size_t i=0; /* use size_t to match type of n */
while (i < n)
printf ("%c", s[i++]); /* update i */
printf(" expected.\n");
}
int main(void){ /* use standard main(). int main(int argc, char **argv) is the another standard type */
printf("%c",65); //after this compiler hangs and asks for exit abnormally
char Arr[] ={'a'}; /* declare an array instead of a pointer */
Expected(Arr, sizeof(Arr)/sizeof(Arr[0]));
return 0;
}
最后,如果真的不是您生成的可执行文件而是您的编译器崩溃了,请扔掉损坏的编译器并获得一个新的。
我正在尝试编写一些 C 代码,当 运行 以下内容时,我的编译器在打印 'A' 后突然终止。为什么?
//report expected thing
void Expected(char *s){
int i=0;
int n = sizeof(s)/sizeof(s[0]);
while (i< n)
printf ("%c", s[i]);
printf(" expected.\n");
}
int main(int argc, char *argv){
printf("%c",65); //after this compiler hangs and asks for exit abnormally
char *Arr ={'a'};
Expected(Arr);
return 0;
}
此外,如果我输入
char *Arr ={"a"}; //note the double quotes
然后它开始打印出无数个“a”。为什么会发生这种情况?
int n = sizeof(s)/sizeof(s[0]);
不是如何获取数组的长度,该数组的指针作为参数传递指向第一个元素。
如果您想让您的函数知道,请传递数组的大小。
char *Arr ={'a'};
不好,因为'a'
是一个整数,你把它转换成一个指针,那么结果就不太可能是一个有效的指针。
char *Arr ={"a"};
是可以的,因为它是一个有效的指针,但是它将是无限循环,因为i
在while
循环中没有更新。
main()
函数的类型是实现定义的。你应该使用标准类型,除非你有一些理由使用特殊的 main()
.
你的代码应该是这样的:
#include <stdio.h>
//report expected thing
void Expected(const char *s, size_t n){ /* add const because the contents of array won't be modified */
size_t i=0; /* use size_t to match type of n */
while (i < n)
printf ("%c", s[i++]); /* update i */
printf(" expected.\n");
}
int main(void){ /* use standard main(). int main(int argc, char **argv) is the another standard type */
printf("%c",65); //after this compiler hangs and asks for exit abnormally
char Arr[] ={'a'}; /* declare an array instead of a pointer */
Expected(Arr, sizeof(Arr)/sizeof(Arr[0]));
return 0;
}
最后,如果真的不是您生成的可执行文件而是您的编译器崩溃了,请扔掉损坏的编译器并获得一个新的。