1

我打算制作一个 python 程序来读取 XML 文档并在执行操作时将其用作参考。但是,手动创建 XML 文档会很乏味,所以我决定编写一个 C 程序来完成大部分工作,不包括第一行和根元素。这是代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
    FILE * fp = fopen("/Users/rajshrimali/Desktop/SPC_CMS.txt", "r");
    FILE * fw = fopen("/Users/rajshrimali/Desktop/SPC_XML", "a");
    char *line = NULL;
    size_t linecap = 0;
    ssize_t linelen;
    while ((linelen = getline(&line, &linecap, fp)) > 0){
        char *token;
        int x = 1; 
        while((token = strsep(&line, ",")) != NULL){
            printf("%s", token);
            if(x == 1){
                fwrite("<item> \n", linelen, 1, fw);
                fwrite("<name> \n", linelen, 1, fw);
                fwrite(token, linelen, 1, fw);
                fwrite("\n </name> \n", linelen, 1, fw);
                x++; 
            }
            if(x == 2) {
                fwrite("<SPC> \n", linelen, 1, fw);
                fwrite(token, linelen, 1, fw);
                fwrite("\n </SPC> \n", linelen, 1, fw);
                fwrite("</item> \n", linelen, 1, fw);
            }
        }
    }
}

编译的代码没有错误。但是,当我运行它时,文件 SPC_XML 几乎不正确:

<item> 
�&lt;na<name> 

 <Agate�0.80

 </name> 
�&lt;SPC> 

 </Agate�0.80

 </SPC> 
<</item> 
,�&lt;item> 
<na<name> 

这种胡说八道持续了一段时间。输入文件fp具有以下格式的数据:

Agate,0.80
Aluminum bronze,0.436
Aluminum,0.87
Antimony,0.21
Apatite,0.84

认为错误出在 fwrite 上,尽管我不知道它是什么。问题是什么?

4

2 回答 2

2

您的if语句有一些明显的错误,=当您应该使用==相等时,您正在使用赋值,例如:

 if(x = 1)

应该:

if(x == 1)

我建议打开警告,与-Wall -W -pedantic您一起使用 gcc 会看到如下内容:

warning: suggest parentheses around assignment used as truth value [-Wparentheses]
         if(x = 1){
于 2013-04-14T01:37:04.750 回答
2

当您调用fwrite时,第二个参数应该是您正在编写的字符串的长度。所以,当你这样做时:

fwrite("<item> \n", linelen, 1, fw);

你最终会写额外的数据,或者可能不够,这取决于是什么linelen。相反,您应该手动计算字符串的大小或调用strlen每个字符串。所以,上面的调用可以变成:

fwrite("<item> \n", 8, 1, fw);

当你写出令牌时,你应该调用strlen

fwrite(token, strlen(token), 1, fw);
于 2013-04-14T01:41:59.507 回答