在Linux系统下运行C代码的问题(把好几个字符串合并为一个字符串)

发布网友 发布时间: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]已经超出范围了,就是越界,所以报段错误

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com