不是附加“abc”(因此最终得到一个充满abcabcabc的文件......),无论我运行多少次,myfile只包含“abc”....我怎么能追加?< / p>
#include <stdio.h>
#include <string.h>
int main(){
char strng[10];
strcpy(strng,"abc");
FILE *my_file;
my_file = fopen("myfile","a+");
if (my_file == NULL){ printf("problem\n");}
fwrite(strng, sizeof(strng), 1, my_file);
printf("appending %s\n",strng);
fclose(my_file);
}
答案 0 :(得分:4)
除了以下事实:
fwrite(strng, sizeof(strng), 1, my_file);
应该是:
fwrite(strng, strlen(strng), 1, my_file);
它对我有用。
答案 1 :(得分:0)
请勿使用sizeof
,请使用strlen
。 sizeof是10,所以你写的是“abc \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0”。
答案 2 :(得分:0)
该程序可以正常工作并执行您要执行的操作:将10个字符(sizeof(strng)
)附加到文件,包括\0
和其余数组。将sizeof
更改为strlen
。
除此之外,您不仅要在无法打开文件时打印“问题”,还要不要写入文件。
代码中的最后一个问题 - 您将main
声明为返回int
,但是在没有设置返回代码的情况下结束程序。如果您正确结束程序,请始终返回EXIT_SUCCESS
。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SIZE 10
char buf[BUF_SIZE];
int main(int ac, char **av) {
FILE *my_file;
strncpy(buf, "abc", BUF_SIZE-1);
buf[BUF_SIZE-1] = '\0';
my_file = fopen("myfile", "a+");
if (my_file == NULL) {
fprintf(stderr, "problem opening file\n");
return EXIT_FAILURE;
} else {
fwrite(buf, strlen(buf), 1, my_file);
printf("appending %s\n", buf);
fclose(my_file);
return EXIT_SUCCESS;
}
}
答案 3 :(得分:-1)
当您打开文件时,流位置位于文件的开头。当然,你必须在写作之前寻求结束才能获得附加的字符串吗?