【问题标题】:Adressing certain array location in C在 C 中寻址某些数组位置
【发布时间】:2020-04-25 21:32:08
【问题描述】:

我正在努力学习 C,所以在做一些练习时遇到了一个我无法理解的问题。

我创建了一个字符数组 buf [100][100],在其中存储了一些字符串。 现在我想通过使用 strcpy 命令将某个字符串更改为另一个字符串。 但是当试图用整数 (z) 对其进行寻址时,它不想工作。但是,当我用一个值手动寻址数组时,它会按预期工作。

谁能给我一个解释?

提前谢谢你, 山姆

代码:

int main() {
    char buf [100][100];
    int i=0,j=0;
    int lijn;
    int x,k;
    int z;

    char stringN [100];
    FILE * fpointer = fopen("employees.txt","r");

    if (!fpointer) { return 1; }
    printf("regel nummer?:");
    scanf("%d",z);
    printf("nieuwe regel");
    scanf("%s",stringN);

    while(fgets(buf[i],100,fpointer)!=NULL){
        i++;
        j++;
    }


    strcpy(buf[z], stringN);
    strcat(buf[z], "\n");
    x=0;

    for (k=j;k>=1;k--){
        printf("%s",buf[x]);
        x++;
    }

    return 0;
}

【问题讨论】:

  • 发布您所说的有效的代码是没有意义的。把不起作用的代码贴出来,最好是完整的程序。

标签: arrays strcpy


【解决方案1】:
    scanf("%d",z);

错了。您必须传递变量的地址,即。 e.

    scanf("%d", &z);

【讨论】:

  • 谢谢,成功了。但是你能告诉我为什么我需要将它“保存”到地址而不是变量吗?如果要使用该变量的值,则直观地将其保存到变量的地址或将其保存到变量会产生相同的结果。特别是因为在 fget() 命令中没有必要。
  • 如果将z 赋予scanf,则传递变量的(未定义)。但是scanf 需要知道 哪里 它必须存储转换后的整数,即。 e.变量的地址。询问fgets() 的好点子:这里(以及scanf("%s", stringN))实际上是一样的,只是array 在传递给函数时是隐式 转换成它的地址。
  • 啊哈!所以我得出结论,当你想从一个数组打印或存储到一个数组时,你可以用一个变量来索引它。但是当你想用它做一些花哨的功能时,比如 strcpy、strcat 等,你必须用那个变量的地址来索引。感谢您的帮助!
  • 这个结论听起来是错误的。仅在需要地址时传递变量的地址才足够,尤其是当某些值要由被调用函数存储时,尤其是当您 index 时更是如此。这不一定与打印或存储到您可以索引的数组有关。您的编译器可能有一些选项,如 -Wall 来帮助。
  • 我将不得不对这个主题进行一些阅读。但再次感谢所有帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多