如何在c中完美截断字符串?

时间:2015-03-01 11:34:03

标签: c arrays string char truncate

我正在读取一个文件,其中每行超过63个字符,我希望字符被截断为63.但是,它无法截断从文件中读取的行。

在这个程序中,我们假设文件只有10行:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char a[10][63];
    char line[255];

    int count = 0;

    //Open file                
    FILE *fp;
    fp = fopen("lines.dat", "r"); 

    //Read each line from file to the "line array"
    while(fgets(line, 255,fp) != NULL)
    {
        line[63] = '\0';

        //copy the lines into "a array" char by char
        int x;
        for(x = 0; x < 64; ++x)
        {
            a[count][x] = line[x];
        }

        count++;
    }

    fclose(fp);

    //Print all lines that have been copied to the "a array"
    int i;
    for(i = 0; i < 10; i++)
    {
        printf("%s", a[i]);
    }


}

2 个答案:

答案 0 :(得分:0)

我认为你错过了空字节。

您可以在Null byte and arrays in C

获取有关此内容的更多信息

答案 1 :(得分:0)

您有这个结果,因为您忘了在[0]的末尾添加空字符串终止符。

有几种方法可以做到这一点。我最喜欢的是按原样保留行:因为看起来你想在别处找到截断的字符串,所以你不能修改源代码。 在这种情况下,您可以替换:

//Tries to truncate "line" to 20 characters
line[20] = '\0';

//copying line to each character at a time
int x;
for(x = 0; x < 20; x++)
{
    a[0][x] = line[x];
}

//copying line to each character at a time
int x;
for(x = 0; x < 20; x++)
{
    a[0][x] = line[x];
}
a[0][20] = 0;