c - 删除前面的空格的程序

标签 c arrays c-strings

我正在开发一个程序,该程序应该从给定文件的每行文本中删除前面的空格和制表符(情况b)。我从标准输入读取了该文件,工作正常。然而我遇到了一个令人讨厌的段错误,我无法弄清楚。当我在情况 b 中调用 strcat() 时会发生这种情况。基本上,我在情况 b 中尝试做的是迭代文本文件中的每一行(80 个字符),从该行中删除任何前面的制表符或空格,然后将这些行放回到 FinalText 中。谁能看到我哪里出错了?或者是否有更简单的方法?

这是我的代码:

int main(int argc, char* argv[]) {
    int x = 0;
    int i = 0;
    int j = 0;
    int y = 0;
    int count = 1;

    char *text = malloc(sizeof(char) * 1024);
    char *finalText =  malloc(sizeof(char) * 1024);
    char buff[80];

    while(fgets(buff, 80, stdin) != NULL){
        strcat(text, buff);

    }


    while ((x = getopt(argc, argv, "bic:")) != -1){
        switch (x){
            case 'b':
                for(; text[i] != EOF; i += 80){

                    char buff2[80];
                    char *buff3;
                    j = i;
                    y = 0;
                    while(j != (80 * count)){
                        buff2[y] =  text[j];
                        y++;
                        j++;
                    }
                    buff3 = buff2;
                    while(*buff3 && isspace(*buff3)){
                        ++buff3;
                    }
                    count++;
                    strcat(finalText, buff3);
                }
                printf(finalText);
                break;
            default:
                break;
        }
    }
    return 0;
}

最佳答案

#include <stdio.h>

int main(){
    char buff[80];
    int n;
    while(fgets(buff, sizeof(buff), stdin)){
        sscanf(buff, " %n", &n);
        if(n && buff[n-1] == '\n')//only whitespaces line.(nothing first word)
            //putchar('\n');//output a newline.
            fputs(buff, stdout);//output as itself .
        else
            fputs(buff + n, stdout);
    }

    return 0;
}

关于c - 删除前面的空格的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27990735/

相关文章:

c - 在 64 位 Windows 上使用 vsnprintf 时出现问题

c - 如何从 clang 获取更细粒度的行/列调试信息?

c++ - 使用 OpenCV(基于霍夫变换或其他功能)编写稳健(颜色和大小不变)的圆检测

java - 将对象转换为字节数组,反之亦然,无需序列化

c++ - 是否有函数/WinAPI 以不区分大小写的语言方式判断一个字符串是否以另一个字符串开头?

c - “~scanf” 是什么意思?

c - 需要验证以创建连续数组

c - 遍历客户端程序接收到的缓冲区

c - 关于动态分配内存给 char 指针的简单问题

c - 在 C 中填充结构数组