将结构中数组的值读入下一个索引值

  • 本文关键字:下一个 索引值 结构 数组 c
  • 更新时间 :
  • 英文 :


我正在尝试获取以下行:

allTowns[i-1].startTown=allTowns[i].endTown;

工作,但每当我运行它时,我都会收到一个错误代码,说明

"错误:赋值给数组类型为"的表达式;

有人知道为什么会这样吗?我的最终目标是运行文件energy.txt,并将其内容放入数组allTowns[1024]中,我做到了这一点,但现在我想让每一行都与前一行相同,但使用startTown,endTown被交换了

例如,一个看起来像这样的文件:

赫尔约克30

曼彻斯特德比-21

将创建一个我可以打印的结构,如下所示:

赫尔约克30

约克赫尔30

曼彻斯特德比-21

德比曼彻斯特-21

非常感谢您提供的任何帮助或建议,我是C的新手,我粘贴在下面的代码是我的代码,但我错过了includes(<stdio.lib>和<tdio.h>(。因为它在头文件中

struct intertownEnergy {
char startTown[256];
char endTown[256];
int energyExpended;
}
allTowns[1024], reverseTowns[1024], readInTowns[8];
int openEnergyFile(void) {
FILE * energyFilePtr = fopen("energy.txt", "r");
int i = 0;
if (energyFilePtr == NULL) {
printf("the file doesn't exist");
return 0;
}
while (!feof(energyFilePtr)) {
fscanf(energyFilePtr, "%s %s %dn", & allTowns[i].startTown, & allTowns[i].endTown, & 
allTowns[i].energyExpended);
printf("Printing the file: %s %s %dn", & allTowns[i].startTown, & allTowns[i].endTown, 
allTowns[i].energyExpended);
i++;
allTowns[i - 1].startTown = allTowns[i].endTown;
}
printf("n");
//printf("Printing town middle test: %s %s %dn", &allTowns[19].startTown, &allTowns[12].endTown, allTowns[12].energyExpended); WORKING TEST
return 0;
}

在C中,数组是内存中的起始地址和大小。

当你这样写的时候,你在内存中有两个不同的数组,并且你试图将其中一个的内容移动到另一个。

allTowns[i - 1].startTown = allTowns[i].endTown;

这在C中是不允许的,至少在该语法中是不可以的。

相反,您需要将endTown的内容复制到startTown,这可以使用strncpy或memcpy 来完成

memcpy(allTowns[i - 1].startTown, allTowns[i].endTown,sizeof(allTowns[i - 1].startTown))

不能使用=复制数组。strncpy起作用。

strncpy(allTowns[i - 1].startTown, allTowns[i].endTown, 255)[255] = 0;

这里的字符串有255个字符长,我们只使用最后一个点作为null终止符。

这真的应该是一个骗局,但我没能找到。

如前所述,您应该在<string.h>图书馆

原因是,因为C中的字符串是指针。更具体地说,它们指向字符串的第一个字符的地址。使用(=(运算符意味着将allTowns[i].endTown的地址分配给该指针allTowns[i - 1].startTown,这是不允许的,因为它几乎类似于执行该allTowns[i].endTown = 0x7ffff3a9ae94,b/c将内存地址分配给指针是操作系统的工作。

最新更新