发布网友 发布时间:2022-04-23 02:20
共2个回答
热心网友 时间:2023-10-11 12:51
s没有初始化,里面可能有随机内容。
声明时初始化
char s[50] = {0};
或者之后 memset(s, 0, sizeof(s));
试试。
另外 i 也需要初始化追问恩 bug已解决 但我还有几个疑问
char s[50] = {0};这句:char数组中的0代表什么?
char s[50] = {0};我写成char *s = "";可以么?
追答char数组中的0代表空字符NIL,也可以代表字符串结尾字符\0。
因为你要用作字符串,你把它看作\0吧。
数组初始化列表可以为数组的所有元素指定初始值,如果列表元素数小于数组大小,则没有指定的值就和已经指定的值的最后一个值相同。
所以, = {0} 相当于 = {'\0', '\0', '\0' ... 50次 }
char *s = ""; 不可以, 常量字符串的地址不可写入,strcat后可能导致意料不到的结果,即使不出错也只能算幸运,不保证环境改变后不出错。
所以,不论是使用栈空间还是堆空间,都要自己保证确保足够的空间。
char s[50] = { 0 };
or
char *s = malloc (50); memset (s, 0, 50); /*or memset(s, '\0', 50);*/
热心网友 时间:2023-10-11 12:51
i值是随机值,需要初始化,你的参数才有4个,argv[i]已经超出范围了,就是越界,所以报段错误