gpt4 book ai didi

C 数组结构,尝试访问数据,但对所有数组都得出相同的结果

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

所以,我的目标是创建一个线性搜索,但我已经得到了这一点,我在从结构访问字符串时遇到一个问题,我使用txt文件存储了该字符串,所以在 linearSearch() 中我尝试这样做:

printf("Name: %s \n", q.name[i]);  
printf("Data: %d \n", q.data[i]);

data会很完美但是name只会为每个数组打印出相同的名称,这将是我放入数组中的最后一项。

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

typedef struct {
char* name[10];
int data[10];
}Word;

//int bubblesort (Word word);
void linearSearch(char* name, Word q);

int main (int argc, const char *argv[]){
Word q;
char username[9]; /* One extra for nul char. */
int score;
int i = 0;
FILE *ifp, *ofp;
ifp = fopen("Data.txt", "r");
while (fscanf(ifp, "%s %d", &username, &score) == 2) {
q.name[i] = username;
printf ("Name: %s, I = %d \n", q.name[i], i);
q.data[i] = score;
printf ("Data: %d, I = %d \n", q.data[i], i);
i++;
}
linearSearch("Matt", q);
return EXIT_SUCCESS;
}
void linearSearch(char* name, Word q){
int i = 0;
int foundIt = 0;
int numNames = sizeof(&q.name);
while ((foundIt == 0) && (i <= numNames)){
printf("Name: %s \n", q.name[i]);
printf("Data: %d \n", q.data[i]);
if ((strcmp(name, q.name[i]) != 0)){
i = i + 1;
} else {
foundIt = 1;
}
}
if (foundIt == 1){
printf("Name found at position %d", i);
} else {
printf("Required person not found");
}
}

最佳答案

这是由于代码而发生的

q.name[i] = username;

您不能使用 = 运算符来分配数组的值。在这里,您将 username 地址分配给每个 q.name[i]。因此,username 的最后一个值反射(reflect)在整个数组中。

您实际需要的是使用 malloc() 分配内存,然后使用 strcpy() 复制字符串内容。

否则,您也可以使用strdup()

无论哪种方式,在使用完分配的内存后,都不要忘记free()它们。

关于C 数组结构,尝试访问数据,但对所有数组都得出相同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28406478/

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