代码之家  ›  专栏  ›  技术社区  ›  Giuliolio93

fprintf练习正在工作,但运行后txt无效

  •  1
  • Giuliolio93  · 技术社区  · 7 年前

    我有个问题,我不知道该怎么办。我有一个任务,要求我从一个文件(比如input.txt)中提取单词,并将它们以相反的顺序写入另一个文件(比如output.txt)。有趣的是,当我执行我的程序时(我的大学给了我一个Xubuntu的VM),不可能双击输出。txt文件原因:我将尝试翻译它: “转换输入中的字节序列无效”

    有趣的是,如果我使用“gedit output.txt”,我会看到这些单词都写得很好,所以我会说我的程序“工作正常,但会损坏文件”。这背后的理论原因是什么?如果你想帮我指出它们,这里有一个指向我的代码的链接[编辑,似乎我无法发布pastebin链接。这是涉及输出文件的部分]:

        `char *t=malloc(sizeof(char)*1025), *tmp;
         t=fgets(t,1024,fp);
    
         while(t!=NULL){
             tmp=strtok(t, " ");
             while(tmp!=NULL){  
                 tmp=strrev(tmp);
                 fprintf(fo, " %s", tmp);
                 tmp=strtok(NULL, " ");
             }
         t=fgets(t,1024,fp);
         }` 
    

    我希望我没有违反任何规则,因为我对这个网站还是新手,谢谢大家!

    1 回复  |  直到 7 年前
        1
  •  0
  •   Tom's    7 年前

    您的代码本身似乎没有问题。

    你能测试一下这个并说你的问题是否再次出现了吗?

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    
    char *strrev(char *str)
    {
        int i = 0;
        int j = strlen(str) - 1;
    
        while (i < j) {
            char tmp = str[i];
            str[i] = str[j];
            str[j] = tmp;
            ++i;
            --j;
        }
      return (str);
    }
    
    #define BUFFER_LEN 1024
    
    int main(int argc, char* argv[])
    {
        char line[BUFFER_LEN + 1];
        FILE *fp                  = NULL;
        FILE *fo                  = NULL;
    
        if (argc != 3 && argc != 4) {
            fprintf(stderr, "Devi usare 2 o 3 argomenti grz\n");
            return -1;
        }
    
        if (!(fp = fopen(argv[1],"r"))) { //argv1=input.txt
            fprintf(stderr, "Devi \n");
            return -1;
        }
        if (!(fo = fopen(argv[2], (argc == 4 && strcmp(argv[3],"a")) ? "a" : "w"))) {
            fprintf(stderr, " 3 argomenti grz\n");
            return -1;
        }
    
        while(fgets(line, BUFFER_LEN, fp)) {
            for (char *word = strtok(line, " "); word; word = strtok(NULL, " ")) {
                fprintf(fo, "%s ", strrev(word));
            }
        }
    
        fclose(fp);
        fclose(fo);
        return 0;
    }
    

    是否可以编译(&A);运行此代码,然后说“鼠标垫”是否仍在迷失自我?

    int main(int argc, char* argv[])
    {
        FILE *fo = NULL;
    
        if (argc != 3 && argc != 4) {
            fprintf(stderr, "Devi usare 2 o 3 argomenti grz\n");
            return -1;
        }
    
        if (!(fo = fopen(argv[2], "w"))) {
            fprintf(stderr, " 3 argomenti grz\n");
            return -1;
        }
    
        fprintf(fo, "test");
    
    
        fclose(fo);
        return 0;
    }