附加在C中失败,只是覆盖

时间:2009-12-05 20:12:35

标签: c file-io

不是附加“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);
}

4 个答案:

答案 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)

当您打开文件时,流位置位于文件的开头。当然,你必须在写作之前寻求结束才能获得附加的字符串吗?