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把这个?
你没有附加在这里:
*(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)
这是错误的,并打开编译器警告以获得正确的诊断.通常,要连接字符串,您需要使用strcat或snprintf.
在这种特定情况下,您不能使用strcat或snprint作为参数来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数组指向的字符串应由程序修改,并在程序启动和程序终止之间保留它们最后存储的值.
(强调我的)