我有以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* user;
char* passwd;
int nr;
void test()
{
int i=0;
for(i=0;i<argc;i++)
printf("Hello %s \n",user);
}
int main(int argc,char*argv[])
{
int i;
nr=argc;
for (i=0; i<argc; i++)
{
user=strdup(argv[i]);
}
test();
return 0;
}
结果是所有位置上的argv[argc]
。我怎样才能解决这个问题?我希望将 test() 放在循环之外。
**
** 在此处的答案之后,这是我的新代码,该代码不起作用。谁能说出原因吗?EDIT
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* user;
void test(int n)
{
int i=0;
for(i=0;i<n;i++)
printf("%s \n",user[i]);
}
int main(int argc,char*argv[])
{
user = (char*) malloc(argc*sizeof(char));
int i;
for (i=0;i<argc;i++)
{
user[i]=argv[i];
}
test(argc);
return 0;
}
最佳答案
您在 for 循环的每次迭代中同时分配密码和用户。您看到的最终值来自上次迭代。此外,由于覆盖先前 strdup
调用的指针,还存在内存泄漏。事实上,您不需要循环:
int main(int argc,char*argv[])
{
if(argc == 3) {
user=strdup(argv[1]);
passwd=strdup(argv[2]);
} else {
// error: usage
}
test();
return 0;
}
如果您想要多个用户/密码组合:
char *user[256], *passwd[256];
void test(int n) {
int i;
for(i=0;i<n;i++)
printf("Hello %s \n",user[i]);
}
int main(int argc,char*argv[])
{
int i;
for(i = 0; i < argc && i < 256; i+=2) {
user[i]=strdup(argv[i]);
passwd[i]=strdup(argv[i+1]);
}
test(argc);
return 0;
}
关于c - 复制字符串数组时出现错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12512184/