首页 > 解决方案 > 文件中的字符串长度

问题描述

我正在尝试创建一个程序,它从任何文件中获取一些文本,并使用下划线对每个字符(空格除外)进行编码'_'

例如,假设我们在文件中有两个单独的行中的单词"name""code"。该程序最终会这样做:

_ _ _ _ 
_ _ _ _ 

问题是当我运行代码时,第一行打印了一个额外的下划线,但最后一行打印正常。代码是:

while(1)
{
    if(fgets(str, 100, fp) == NULL)
        break;
    for(i=0; i<strlen(str); i++)
    {
        if(str[i] != ' ')
        {
            printf("%c ", '_');
        }
        else
            printf(" ");
    }
    printf("\n");
}

标签: c

解决方案


这是因为fgets保留了文件中每一行末尾的换行符,但最后一行不包含一个。该代码不测试空白字符,只测试实际空格。您可以删除换行符

str [ strcspn(str, "\r\n") ] = '\0';

推荐阅读