在char数组中格式化文件输入的文本?

时间:2016-07-25 14:23:02

标签: c arrays

我有一个包含特定文本字符串的file.txt。让我们说字符串是,没有引号“xDfS2 \ 0dj \ 0 \ 0aj”

首先,我将此文本放入char数组中,我使用fopen和fread将文本输入char *workingarray;

我的问题来自于尝试打印此数组的形式。 (使用printf)我想逐个字符地打印数组,但每次读取'\0'时我都希望它转到一个新行..所以workingarray的输出将是..

xDfS2 
dj

aj

我正试图立即实现这一目标..

for( i=0; i <= length; i++ ) {
    if( workingarray[i] = '\0' ) {
        printf("\n");
    } else {
        printf( "%c", workingarray[i]);
    }
}

现在这不起作用,因为它没有看到第一个\ 0为'\0',而是'\''0',数组中有两个单独的字段。我还尝试使用'\'来搜索'\\',以便补偿它是一个转义序列的事实,但这只会给我一个分段错误,并且在尝试运行它时会感到核心愚蠢。 / p>

我还尝试过制作第二个基于第一个数组的数组,但是从第一个数组中获取'\'并在第二个数组中将其设为'\0'而忽略任何0在第一个,而不是像这样。

int k = 0
length = sizeof(workingarray);

for(i=0; i <= length; i++) {
    if( workingarray[i] = '\\') {
        newarray[i-k] = '\0';
        k++;
    } else if ( workingarray[i] = '0' ) {
        return;
    } else {
        newarray[i-k] = workingarray[i];
    }
}

长话短说..我不知道该怎么做。如何从文件中输入一串文本(整个文件,而不仅仅是文件的某一部分),然后将该字符串打印出来,同时为字符串中的每个\ 0创建新行?

1 个答案:

答案 0 :(得分:3)

如果您在数组中有实际'\\''0'而不是NUL,那么只需执行

for( i=0; i < length; i++ ) {
    if( workingarray[i] == '\\' && workingarray[i+1] == '0' ) {
        i++;
        printf("\n");
    } else {
        printf( "%c", workingarray[i]);
    }
}

另请注意,您需要在for循环中使用<而不是<=,并且需要使用==而不是=进行比较。