fwrite后char数据的值发生了变化

时间:2010-07-20 23:47:46

标签: c fwrite

您好我的代码如下

char name[100] ;
_getcwd(name, (size_t)sizeOfFileName);
strcat(name,"\\") ;
strcat(name, fileName) ;
char *value_str= NULL ;
file = fopen(name, "a+");
if(!file)
   printf("bad file name") ;
for(i = 0; i<fileSize ; i++)
 {
  value_str = fp_to_str(ddata[i]) ;
  strLength= strlen(value_str) ;
  value_str[strLength+1] = 10 ;
  num = strlen(value_str);
  count = fwrite(value_str, sizeof(char), num, file);
 }

我在将value_str的值写入file给出的文件时遇到问题。在它到达包含fwrite的代码行之前,value_str的值不会改变。然后它变成了一些垃圾值。你能告诉我有什么问题吗? SizeOfFileName先前传递给函数。代码完美无缺,直到它到达fwrite代码行,然后它的值才会改变。并将一些垃圾值写入文本文件。

函数fp_to_str是我当前代码中自己的函数。它正确地返回我想要value_str的值。 fp_to_str的作用是将双数转换为字符数组,该数组存储在value_str中。

一旦使用fwrite完成代码,它会将value_str中的正确数据更改为某个垃圾值。

ddata [i]逐个从double数组中取两个数字并将其传递给fp_to_str()。我想要做的是将ddata []数组中的这些双数写入文本文件。

我已经注释了该行,以便在字符串的末尾添加值10。我错误地认为我必须在字符串的末尾添加一个空字符。 我仍然遇到同样的问题。有谁知道为什么?

2 个答案:

答案 0 :(得分:2)

除了阿德里安麦卡锡所说的话:

value_str = fp_to_str(ddata[i]) ;
strLength= strlen(value_str) ;
value_str[strLength+1] = 10 ;
num = strlen(value_str);

num在这里等于strLength,这让我觉得你不确定你在做什么。 (你在做什么?)你在空终止符之后添加值10(魔术常量 - 这是一个换行符吗?使用'\ n')到空格。你的字符串是:

o  W  o  r  l  d  \0 \x10

答案 1 :(得分:0)

如果value_str在包含fwrite的行之前没有更改,则fp_to_str必须返回NULL(因为指针已初始化为NULL而您报告该值不会改变)。 NULLfp_to_str的有效返回值,还是可能表示错误?