c - 复制字符串数组时出现错误结果

标签 c arrays pointers

我有以下代码:

#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/

相关文章:

python - 为 Windows 7 构建 Mesa。Mesa 9.1

javascript - 按长度过滤国家名称

java - 如何使这两个java方法通用

c# - 如何使用 Pinvoke 返回字符串数组

c - 如何在 AP 中查找缺失的术语

c - 如何使用封装在源文件之间传递 typedef 定义?

c++ - 如何像普通 C 函数一样使用正确的 'this' 指针调用 C++ 类成员函数? (指向类成员函数的指针)

c++ - 我如何着手允许类类型的对象未初始化并在不使用指针的情况下识别这种情况?

c - 传递参数时指针到指针的语法(C 语言)

c - 这个类型转换是否正确?