c - 只有字符串的第一个字符才会在 C 中打印

标签 c data-structures character-arrays

我有这个结构

typedef struct grade
{
    char firstName[SIZE];
    char lastName[SIZE];
    int stuNum;
}GRADE;

以及此输出代码:

void printData(GRADE grade[], int used)
{
    int i;
    for(i=0; i<used-1; i++)
    {
        printf("%s %s %d\n", grade[i].firstName, grade[i].lastName, grade[i].stuNum);
    }
}

当我尝试打印字符时,它们只打印字符串的第一个字符,我处于静止状态,无法真正弄清楚如何让它打印字符串的其余部分。

此代码读取数据文件(格式为 "Firstname Lastname StudentNumber",大约 17 行,例如 "Mark Markinson 1234" 换行符 “blah blah 1234” 等)。

void readData(FILE *infile, GRADE grade[], int *count)
{
    char buf[SIZE] = {0};
    int position=*count;
    int used = 0;
    while( fgets(buf, SIZE, infile))
    { 
        removeNL(buf);

        grade[position].firstName[0] = parseName(buf, &used);
        used++;

        grade[position].lastName[0] = parseName(buf, &used);
        used++;

        grade[position].stuNum = parseNumber(buf, &used);
        used = 0;
        position++;
    }
    *count = position;

}

这是解析缓冲区中名称的代码:

char parseName(char *str, int *place)
{
    char buf[SIZE] = {0}, name;
    int i=*place,j=0;

    while( str[i] != '\0' && !isspace(str[i]))
    {
        buf[j++] = str[i++];

    }
    buf[j] = '\0';

    *place = i;

    return *buf;
}

在这里采取一些建议后,我更改了一些代码,但它仍然做同样的事情(只打印第一个字符)

用这种方式调用函数

parseName(buf, &used, grade[position].firstName);

现在是 parseName

void parseName(char *str, int *place, char *firstName)
{
    char buf[SIZE] = {0}, name;
    int i=*place,j=0;    
    while( str[i] != '\0' && !isspace(str[i]))
    {
        buf[j++] = str[i++];

    }
    buf[j] = '\0';

    *place = i;

    *firstName = *buf;
}

最佳答案

return *buf 返回(仅)buf 中的第一个字符,这是您存储到 firstNamelastName 中的所有内容数组。问题是数组不是 C 中的一流类型,因此您不能将它们作为参数传递给函数或将它们作为返回值返回。

您可能想要做的是将指针传递给缓冲区以填充到 parseName 并让它填充它,而不是使用本地缓冲区。然后,您只需直接传入 firstNamelastName,它们将成为指向这些字段开头的指针。

关于c - 只有字符串的第一个字符才会在 C 中打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944786/

相关文章:

c - 当我们有值而不是指针时如何检查空指针取消引用

java - 在Java中初始化大量数组?

c++ - 括号和指针节点

字符数组使用

c - 为什么 1024*1024*1024*2 != 1024*1024*1024*2

c++ - 无论是在 C++ 还是 C 中,相同的数字代码都会返回不同的输出

c - poll如何处理关闭的管道

algorithm - 有效地找到匹配位掩码的第一个元素

c++ - 调整 char 数组的大小并不总是有效

c++ - 字符数组在结束前包含空字符