两个char数组C的连接

jou*_*r92 0 c arrays string pointers char

int main(int argc, char *argv[]) {
  char *s = argv[1];
  *(s + (strlen(argv[1]))) = argv[2];
  printf("%s \n", s);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我跑步时:./concat hello, world输出是:
hello,Mworld我期待
hello,world

什么是M炭?为什么C把这个?

P.P*_*.P. 6

你没有附加在这里:

   *(s+(strlen(argv[1])))=argv[2];
Run Code Online (Sandbox Code Playgroud)

你正在分配一个char*空字节,argv[1]即它相当于

 argv[0][strlen(argv[1])] = argv[2];
Run Code Online (Sandbox Code Playgroud)

这是错误的,并打开编译器警告以获得正确的诊断.通常,要连接字符串,您需要使用strcatsnprintf.

在这种特定情况下,您不能使用strcatsnprint作为参数来main()添加额外的内存.因此,您需要使用辅助数组或"malloc"指针来进行连接.

main()在尝试使用它们之前,还应检查是否有足够的参数传递给它们.

注意,你可以修改argv[x].例如,如果执行为:

./a.out stack overflow
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

argv[1][1] = 'l'; 
//argv[1] is now "slack"
Run Code Online (Sandbox Code Playgroud)

等等,只要你不超越它的界限.基本上你可以像指针一样对待你可以修改的数组.

C11,5.1.2.2.1程序启动,p2状态

参数argc和argv以及argv数组指向的字符串应由程序修改,并在程序启动和程序终止之间保留它们最后存储的值.

(强调我的)