C 在中读取以逗号结尾的字符串时出现问题

C 在中读取以逗号结尾的字符串时出现问题,c,string,comma,C,String,Comma,我有一个函数,它在一个文件中读取如下内容,并将其读入一个结构中。我正在努力确保结构被正确填充;并且,正确填写了性别、身高和体重。但是,我在验证它的名称(字符数组)部分是否正确填充时遇到问题 要读入的示例文件: Name,Gender,Height,Weight Tanner,M,71.8,180.25 John,M,70.75,185.3 Parker,F,65.25,120.3 Meeks,M,57.25,210.2 Big,M,57.5,150.1 Jackson,F,52.1,163.4

我有一个函数,它在一个文件中读取如下内容,并将其读入一个结构中。我正在努力确保结构被正确填充;并且,正确填写了性别、身高和体重。但是,我在验证它的名称(字符数组)部分是否正确填充时遇到问题

要读入的示例文件:

Name,Gender,Height,Weight
Tanner,M,71.8,180.25
John,M,70.75,185.3
Parker,F,65.25,120.3
Meeks,M,57.25,210.2
Big,M,57.5,150.1
Jackson,F,52.1,163.4
结构定义:

struct canData
{
    char name[50];
    char gender;
    float height;
    float weight;
}CD[structSize]; // end struct BP
读取文件的循环的一部分:

char name[50];
    char gender;
    float height;
    float weight;
    int position = 0;

filePtr = fopen(fileName, "r"); // open file
    if (filePtr == NULL) // error check opening file
    {
        printf("Opening file failed. Please reenter filename.");
        exit(1); // WILL THIS RETURN TO MENU?
    } // end if

// skip header line of file
    char buffer[100];
    fgets(buffer, 100, filePtr);

while (fscanf(filePtr, "%[^,], %[^,], %f, %f", &name, &gender, &height, &weight) == 4) // read in
    {
        printf("%s\n", name); // DEBUG ATTEMPT
        printf("%s\n", CD[position].name); // DEBUG ATTEMPT
        printf("%f\n", weight); // DEBUG ATTEMPT

        strcpy(CD[position].name, name);
        CD[position].gender = gender;
        CD[position].height = height;
        CD[position].weight = weight;
        position++;
        iCount++;



    } // end while
目前,我的输出如下:

(space where name should be)
(space where CD[position].name should be)
180.25
(space where name should be)
(space where CD[position].name should be)
185.3
(space where name should be)
(space where CD[position].name should be)
120.3
(space where name should be)
(space where CD[position].name should be)
...

谢谢你的洞察力!我是C初学者,所以我可能遗漏了一些愚蠢的东西。

scanf
在读取字符串时,需要一个指向数组初始字节的指针。因此,当您作为参数传递时,不要使用
&
<代码>fscanf(fp,“%[^,]”,name)应该可以工作

name
在表达式中使用时将转换为指针


什么类型的
姓名
性别
身高
体重
?是否确实通过向类型错误的对象传递指针来调用未定义的行为?是否确定调试尝试中的
CD[position].name
?请张贴一张。您打印的
CD[position].name
strcpy
之前。另外,请尝试
while(fscanf(filePtr,“%[^,]”,“%[^,]”,“%f,%f”,name,gender,&height,&weight)==4)
gender
只能存储一个字符,因此考虑到终止的空字符,只能读取零个字符。@MomoDevi它似乎恰好可以工作。不要访问未分配的位置。使用
%c
读取单个字符。“
name
本身就是代码中的指针。”不,
name
不是指针,而是数组。表达式中使用的数组按顺序转换为指向其第一个元素的指针。常用的例外情况是
sizeof
运算符的操作数和一元
&
运算符。