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

String C编程:Strlen(),字符串,字符问题,string,scanf,String,Scanf,我在将个人姓名首字母的字符从结构如下的文件存储到字符数组(字符串)时遇到问题: AB Albert Bumble FG Fred Goofoff GF Gary Flintstone DD Donald Duck void readf(char finitlett[], char sinitlett[], char name[][80]) { char fileName[20] = "text.dat"; FILE*inFile = NULL; inFile = fo

我在将个人姓名首字母的字符从结构如下的文件存储到字符数组(字符串)时遇到问题:

AB Albert Bumble
FG Fred Goofoff
GF Gary Flintstone
DD Donald Duck
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));
}
char finitlett[MAX]将存储首字母的所有第一个字母A F G D。 char sinitlett[MAX]将存储首字母的所有首字母B G F D

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

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

AB Albert Bumble
FG Fred Goofoff
GF Gary Flintstone
DD Donald Duck
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));
}

确保正在使用“\0”字符初始化数组。Strlen的工作原理是查找第一个“\0”字符,如果数组中没有完全填充这些字符,那么Strlen可能会将字符数组中剩余的“垃圾数据”作为字符串的一部分进行计数。

很抱歉,该文件包含换行符。
Strlen()
返回类型为
size\t
的结果
printf
%d“
格式需要类型为
int
的参数。您应该强制执行
strlen()
调用,或者使用
%zu
,这是
大小的格式(旧的实现可能不支持
%zu
)。