c - 如何在 C 中访问 getline() 中的字符

标签 c getline

我正在尝试从 getline() 访问文本,以便扫描其中的特殊字符。该程序从一个文件中读取并创建另一个文件,但是,我必须从第一个文件中删除注释并将其打印到第二个文件而不带注释。在这种情况下,我需要能够读取所有“%”并删除右侧的所有内容。这是我家庭作业的一部分,我不是在找人来完成它并作弊。我只需要找到一种方法将行存储在 char 数组中,这样我就可以遍历并找到 '%'(如果它存在)。

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

int main(int argc, char *argv[]){


    FILE *fp, *fp2;

    char *line = NULL;
    size_t len = 0;
    ssize_t read = 0;
    //int i = 0;

    //line = test;

    fp = fopen("taxDemo.m", "r");
    fp2 = fopen("taxDemoNoComments.m", "w");

    if(fp == NULL)
        exit(EXIT_FAILURE);


    while((read = getline(&line, &len, fp)) != -1){
        /* for (i = 0; i < len; i++){
            test[i] = line;
            line++;
        }
        */

        //printf("%s", test);

        printf("%s", line);

        fprintf(fp2, "%s", line);
    }


    free(line);
    fclose(fp);
    fclose(fp2);

    return 0;
}

最佳答案

这是一个基于您的代码的解决方案。我添加了示例文件的创建和行的分配。

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

int main(int argc, char *argv[]) {

    FILE *fp, *fp2;

    char *line = NULL;
    size_t len = 1024;
    size_t read = 0;

    line = (char*) malloc(len * sizeof(char));
    if (line == NULL) {
        perror("Unable to allocate line...");
        exit(1);
    }
//Create sample file
    fp = fopen("taxDemo.m", "w+");

    for (int i = 0; i < 10; i++) {
        fprintf(fp, "Non commented part of the line %i %% Commented \n", i);
    }
    fclose(fp);
    fp = fopen("taxDemo.m", "r");
    fp2 = fopen("taxDemoNoComments.m", "w");

    if (fp == NULL)
        exit(EXIT_FAILURE);

    while ((read = getline(&line, &len, fp)) != -1) {
        for (int i = 0; i < len; i++) {
            if (line[i] == '%')
                line[i] = '\0';
        }

        printf("%s\n", line);

        fprintf(fp2, "%s\n", line);
    }
   free(line);
    fclose(fp);
    fclose(fp2);

    return 0;
}

关于c - 如何在 C 中访问 getline() 中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40066017/

相关文章:

c++ - getline() 在 Eclipse 中返回空行,但在 Dev C++ 中正常工作

c - 当有多个 fork 进程在运行时,我无法理解流程

c - 尝试从树(结构)中消除节点时遇到问题

c - 关于在C编程中只为数组、排序和数字分配内存的问题

c++ - fstream getline() 未处理的异常

c++ - 在 cin 之后使用 getline(cin, s)

c++ - cin 和 getline 跳过输入

用于简单计算的 CUDA 加速

c - 随机化数组元素的序列

c++ - 我怎样才能让 getline 运算符(operator)工作?