我打算创建一个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>
�<na<name>
<Agate�0.80
</name>
�<SPC>
</Agate�0.80
</SPC>
<</item>
,�<item>
<na<name>
这个废话持续了一段时间。
输入文件fp
包含以下格式的数据:
Agate,0.80
Aluminum bronze,0.436
Aluminum,0.87
Antimony,0.21
Apatite,0.84
我认为错误与fwrite有关,虽然我不知道它是什么。问题是什么?
答案 0 :(得分:2)
您的if
语句有一些明显错误,当您使用=
相等时,您正在使用==
分配,例如:
if(x = 1)
应该是:
if(x == 1)
我建议启用警告,使用gcc和-Wall -W -pedantic
你会看到类似的内容:
warning: suggest parentheses around assignment used as truth value [-Wparentheses]
if(x = 1){
答案 1 :(得分:2)
当您调用fwrite
时,第二个参数应该是您正在编写的字符串的长度。所以,当你这样做时:
fwrite("<item> \n", linelen, 1, fw);
你最终会写出额外的数据,或者可能还不够,这取决于linelen
是什么。相反,您应该手动计算字符串的大小,或者在每个字符串上调用strlen
。所以,上面的调用可以变成:
fwrite("<item> \n", 8, 1, fw);
当你写出令牌时,你应该拨打strlen
:
fwrite(token, strlen(token), 1, fw);