gpt4 book ai didi

c - 我的数组仅保存存储在C中的最后一个元素

转载 作者:行者123 更新时间:2023-11-30 16:08:16 24 4
gpt4 key购买 nike

我想将从输入中获取的一些信息存储到特定数组中。但是,当我尝试使用输入中的名称和姓氏执行此操作时,我似乎遇到了一个问题,即最后输入的元素会覆盖前一个元素。这可能是什么问题?在此先感谢...这里的代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct ask5 {
char *onomata[1024],*epwnyma[1024];
int arithmoim[1024];
float bathmoi[1024];
};

int main(int argc, char *argv[]) {
int x,i,tempi,l,reorder,k,j,u,y,p;
struct ask5 *m = (struct ask5*)malloc(sizeof(struct ask5));
char *xwrismos,input[1000][1024],*tempc,newstring[4][100],*eachstring;
float q,tempf,avg;
FILE * fptr;
FILE *fexit;
k=0;
i=0;
fptr=fopen("input.txt", "r");
while(fgets(input[i], 1024, fptr)) {
input[i][strlen(input[i]) +1 ] = '\0'; \\im putting the input in specific arrays\\
i++;
}
k=i;
l=input[0][0] - '0'; \\first row of the input shows how many info will follow\\
x=l;
p=0;
for (i=1; i<x+1; i++) {
j=0;
u=0;
eachstring = input[i];
for (y=0; y<=(strlen(eachstring)); y++) {
if(eachstring[y]==' ' || eachstring[y]=='\0') {
newstring[u][j]='\0';
u++;
j=0;
}
else {
newstring[u][j]=eachstring[y];
j++;
}
}
m->onomata[p]=newstring[0]; \\here is the problem\\
m->epwnyma[p]=newstring[1]; //and here//
sscanf(newstring[2], "%d", &m->arithmoim[p]);
sscanf(newstring[3], "%f", &m->bathmoi[p]);
p=p+1;
}
fclose(fptr);

最佳答案

m->onomata[p]=newstring[0];  \\here is the problem\\


确实存在问题。因为您使每个 m->onomata[p]指向相同的 newstring[0]。与 newstring[1]相同。

您可能希望复制 newstring,以便可以在下一次迭代中重用它们。您可以使用 strdup

    m->onomata[p]=strdup(newstring[0]);
m->epwnyma[p]=strdup(newstring[1]);

关于c - 我的数组仅保存存储在C中的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59413930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com