发布网友 发布时间:2022-04-23 02:20
共2个回答
热心网友 时间:2023-10-11 12:51
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]已经超出范围了,就是越界,所以报段错误