gpt4 book ai didi

c - 函数调用适用于字符串文字,但不适用于字符串变量 C

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

我正在尝试从服务器获取 file1.txt 中不同 id 代码的一些数据。如果我使用字符串文字 d.id = "ABC" 调用 fetchData(&d) 工作得很好,但如果我使用变量 array[idx] 包含每个 id 从文件中读取后不起作用。谁能告诉我我做错了什么(不知道 fetchData() 的内部结构)?我正在学习C,请耐心等待。

file1.txt 的内容如下所示:

ABC
DEF
...

我的代码如下:

/*    #include "myapi.h" */ //fetchData

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

typedef struct param {
char *id;
} param_t;

int countlines(char filename[])
{
// count the number of lines in the file called filename
FILE *fp = fopen(filename,"r");
int ch=0;
int lines=0;

while(!feof(fp))
{
ch = fgetc(fp);
if(ch == '\n')
{
lines++;
}
}

fclose(fp);
return lines;
}

int main()
{

char filename[] = "file1.txt";
int N = countlines(filename);

// open the file for reading
FILE *file = fopen(filename, "r");

// make sure the file opened properly
if(NULL == file)
{
fprintf(stderr, "Cannot open file: %s\n", filename);
return 1;
}

size_t buffer_size = 10;

/* create an array of char pointers */
char **array = malloc(N * buffer_size * sizeof(char*));

/* allocate space for each string: */
int line_number = 0;
for (line_number = 0; line_number < N; ++line_number) {
array[line_number] = (char *)malloc(buffer_size+1);
}

// read each line into the string array
line_number = 0;
while(-1 != getline(&(array[line_number]), &buffer_size, file))
++line_number;

fclose(file);

param_t d, dempty;

memset(&d, 0, sizeof d);
memset(&dempty, 0, sizeof dempty);

int idx;
for (idx=0; idx<N; idx++)
{

if(!(d.id = malloc(strlen(array[idx]) + 1)))
{
//allocation failed
}

/* if initialized with string literals the data request works */
d.id= "ABC";

/* if d is initialized with a variable the data request doesn't work */
// strcpy(d.id, array[idx]);

fetchData(&d);

/* reset structure*/
d = dempty;

}

/*free memory */
for (;idx>=0;idx--)
free(array[idx]);
free(array);

return 0;
}

编辑:删除每个 array[idx] 上的 \n 字符后,我的问题得到了解决。

最佳答案

删除每个 array[idx] 上的 \n 字符后,我的问题得到解决

关于c - 函数调用适用于字符串文字,但不适用于字符串变量 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35365729/

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