Argc/Argv C问题

1 c

如果我有以下代码:

main(int argc, char *argv[]){
 char serveradd[20];
 strcpy(serveradd, argv[1]);
 int port = atoi(argv[2]);
 printf("%s %d \n", serveradd, port);
Run Code Online (Sandbox Code Playgroud)

打印命令行的前两个参数.但是,如果我这样做:

 char serveradd[20];
 strcpy(serveradd, argv[1]);
 int port = atoi(argv[2]);
 char versionnum[1]; 
 strcpy(versionnum, argv[3]);
 printf("%s %d %s \n", serveradd, port, versionnum);`
Run Code Online (Sandbox Code Playgroud)

第一个参数(serveradd)不打印到屏幕上并且没有存储...为什么会发生这种情况,我该如何解决?谢谢!

MSN*_*MSN 10

char versionnum[1];  
strcpy(versionnum, argv[3]); 
Run Code Online (Sandbox Code Playgroud)

疯狂的猜测,但你用这些线粉碎堆栈.让versionnum大; 就目前而言,它只能安全​​地保持空弦.

  • 几乎肯定会粉碎堆栈,因为strcpy会在复制后添加一个null,即使只有一个字符.versionnum至少需要2个字符长. (3认同)