如何从 C 中的字符串数组中删除空白元素?

How to remove blank elements from an array of strings in C?

我正在处理文件输入。我想将每一行存储为数组中的字符串。例如:如果文件有行:

This is line 1.
This is line 2.
This is line 3.

字符串应包含:

char str[][] = {"This is line 1.", "This is line 2.", "This is line 3."};

当我尝试使用额外的空格时:

This is line 1.


This is line 2.
This is line 3.

输出格式相同。 我想从我的句子数组中删除那些多余的空行,以便输出与以前相同。我应该怎么做?

[编辑] 我正在使用以下循环将句子从文件输入到数组:

while (fgets(str[i], LINE_SIZE, fp) != NULL)
{
    str[i][strlen(str[i]) - 1] = '[=13=]';
    i++;
}

您应该在 fgets 的调用中使用中间一维字符数组,例如

for ( char line[LINE_SIZE]; fgets( line, LINE_SIZE, fp) != NULL; )
{
    if ( line[0] != '\n' )
    { 
        line[ strcspn( line, "\n" ) ] = '[=10=]';
        strcpy( str[i++], line );
    }
}

如果一行可以包含空格,您可以按以下方式更改 if 语句的条件

for ( char line[LINE_SIZE]; fgets( line, LINE_SIZE, fp) != NULL; )
{
    size_t n = strspn( line, " \t" );

    if ( line[n] != '\n' && line[n] != '[=11=]' )
    { 
        line[ n + strcspn( line + n, "\n" ) ] = '[=11=]';
        strcpy( str[i++], line );
    }
}

在上面的代码片段中,您可以替换此语句

strcpy( str[i++], line );

对于此语句,如果您希望字符串不包含前导空格。

strcpy( str[i++], line + n );