не удается добавить в C, просто перезаписать - PullRequest
4 голосов
/ 05 декабря 2009

Вместо добавления «abc» (и, следовательно, в конечном итоге получения файла, полного abcabcabc ....), независимо от того, сколько раз я запускаю это, myfile содержит только «abc» .... как я могу добавить?

#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 ]

4 голосов
/ 05 декабря 2009

Помимо того, что:

fwrite(strng, sizeof(strng), 1, my_file);

должно быть:

fwrite(strng, strlen(strng), 1, my_file);

у меня это работает.

1 голос
/ 05 декабря 2009

Эта программа работает и выполняет то, что вы сказали: добавьте 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;
    }
} 
0 голосов
/ 05 декабря 2009

Когда вы открываете файл, позиция потока находится в начале файла. Конечно, вы должны искать до конца, прежде чем писать, чтобы добавить строку?

0 голосов
/ 05 декабря 2009

Не используйте sizeof, используйте strlen. sizeof равен 10, поэтому вы пишете «abc \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...