所以我正在编写一个小工具来格式化我的清单文件,这样我就可以将它导入到预先存在的数据库中。我在尝试做fscanf时遇到了一个很大的问题。在过去,我已经阅读了大量的c文件。我到底做错了什么。
根据Christopher的建议进行编辑仍然是空的。
#include <stdio.h>
#include <string.h>
int main ()
{
FILE* stream;
FILE* output;
char sellercode[200];
char asin[15];
string sku[15];
string fnsku[15];
int quality;
stream = fopen("c:\out\dataextract.txt", "r");
output = fopen("c:\out\output.txt", "w");
if (stream == NULL)
{
return 0;
}
for(;;)
{
//if (EOF) break;
fscanf(stream, "%s", sku);
fprintf(output, "%s %s %s %s %i\n", sku, fnsku, asin, quality);
}
return 0;
}发布于 2011-05-27 04:02:02
实际上这里有很多问题。Christopher和mah (在评论中)提到了其中的一些。但一个更大的问题是,您没有分配任何空间来读取(和写入)数据。
让string sellercode = ""; (附注: do not define a "string“type,在这里你只会伤害到自己),你指向的是一个只读的字符数组。你实际上需要在这里留下一些内存来读入你的数据,否则你就有可能破坏你的内存。
应声明以下变量:
char sellercode[SOME_REASONABLE_SIZE];
char asin[SOME_REASONABLE_SIZE];
char sku[SOME_REASONABLE_SIZE];
char fnsku[SOME_REASONABLE_SIZE];值为SOME_REASONABLE_SIZE的。
您还应该始终显式关闭您的文件。千万不要让它们开着。
我注意到你提到的最后一件事是在你的路径中使用了反斜杠,但它们是非转义的。你就得躲开他们。
stream = fopen("c:\\out\\dataextract.txt", "r");
output = fopen("c:\\out\\output.txt", "w");发布于 2011-05-27 03:49:33
if (stream = NULL)
{
return 0;
}应该是
if (stream == NULL)
{
return 0;
}发布于 2011-05-27 04:17:13
反斜杠是字符串中的转义字符。在路径名中使用正斜杠。"c:/foo/bar.txt“
https://stackoverflow.com/questions/6144166
复制相似问题