C编程:Strlen(),字符串,字符问题

时间:2012-12-11 22:17:02

标签: string scanf

我遇到的问题是将一个人的首字母的字符存储到一个char数组(字符串)中,该文件的结构如下:

AB Albert Bumble
FG Fred Goofoff
GF Gary Flintstone
DD Donald Duck

char finitlett [MAX]将存储首字母的所有首字母,A F G D. char sinitlett [MAX]将存储首字母的所有首字母B G F D.

问题是当我打印strlen(finitlett)时,该数字大于文件中的条目数。

这是我创建的用于检索条目并将它们放入数组的代码,如下所示:

void readf(char finitlett[], char sinitlett[], char name[][80])
{
    char fileName[20] = "text.dat";
    FILE*inFile = NULL;

    inFile = fopen(fileName, "r");

    if (inFile == NULL)
    {
     printf("Error in opening the file %s\n", fileName);
     exit(0);
    }

    int i = 0;
    while(fscanf(inFile, "%c%c%80[^\n]\n", &finitlett[i], &sinitlett[i], &name[i]) != EOF){
        printf("Initials : %c%c | Name : %s\n", finitlett[i], sinitlett[i], name[i]);
        i++;
    }

    fclose(inFile);
    printf("Number of entries: %d\n", i);
    printf("Length of array: %d\n", strlen(finitlett));
    printf("Length of array: %d\n", strlen(sinitlett));
}

1 个答案:

答案 0 :(得分:0)

确保使用'\ 0'字符初始化数组。 Strlen通过查找第一个'\ 0'字符来工作,如果您的数组没有完全填充这些字符,那么以strlen开头可能会将char数组中的“垃圾数据”计算为字符串的一部分。