【问题标题】:Changing char[] in C在 C 中更改 char[]
【发布时间】:2018-11-19 08:59:34
【问题描述】:

我正在寻找答案,但无处可寻。我希望你能帮助我。我编写了一个简单的应用程序,其中包括名称为 worker 和 .但是当我想更改名称的值时,我不能这样做。我不知道为什么。也许您无法帮助我,或者您知道其他方法?我的代码:

struct workers {
char name[256]="no";
int pay=-1;
};

void addOne(struct workers work[20]) {
    char name[256];
    int i=0;
    for (i = 0; work[i].name != "no"; i++) {}
    printf_s("Enter name of worker: ");
    scanf_s("%s", &name);
    //-----error here-----
    work[i].name = name;
}

int main()
{
    int i;
    struct workers work[20];
    for (i = 0;i < 20; i++) {
        if (work[i].name != "no") {
            work[i].pay = 100 * i;
        }
    }
    for (i = 0; i < 20; i++) {
        printf_s("%s\t%d\n", work[i].name, work[i].pay);
    }
    return 0;
}

【问题讨论】:

  • 这不是有效的 C 代码。您不能在结构的定义中初始化结构成员。
  • 但我没有在定义中初始化它们。我只是确定默认姓名和薪水。而在函数 addOne 我只想改变他们的价值
  • "我只是确定了默认姓名和薪水。" 是的,这是一个语法错误。你不能在 C 中做到这一点。
  • 好的,但是如何添加成员?

标签: c arrays string replace


【解决方案1】:
work[i].name = name;

上面一行是问题所在。

如下修改:

snprintf( work[i].name, sizeof(work[i].name), "%s", name);

您所做的是尝试更改数组的基指针而不是名称。

代码中还有一些错误,请解决。

无法像在 C 中那样为结构设置默认值。

您必须编写代码以在循环中用“no”初始化每个数组实例名称变量,然后使用其中一个字符串比较函数来比较字符串。然后调用你的 addOne。

【讨论】:

  • strncpy ( work[i].name, name, strlen(name)); 是一个非常糟糕的建议。
  • 基本上不要使用strncpy
  • 是的,了解使用 strncpy 的问题.... 我看到的替代方法是 snprintf 使用如下snprintf( work[i].name, sizeof(work[i].name), "%s", name);
猜你喜欢
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 1970-01-01
  • 2021-01-08
  • 1970-01-01
  • 2016-01-20
  • 2019-05-24
  • 2014-08-20
相关资源
最近更新 更多