Универсальный пользователь в директориях? - PullRequest
0 голосов
/ 22 марта 2019

Я хочу написать текст в текстовый файл, но мне нужен универсальный ПОЛЬЗОВАТЕЛЬ в каталоге.Например, C: /Users/USER/Desktop/test.txt

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#include<string.h>
#include<windows.h>
#include<signal.h>
void main() {
    int i,l;
    FILE *fp;
    char text[255];
    char verz[255];
    char username[128];
    DWORD usernamelen;
    if(!GetUserName(username, &usernamelen)) {
        printf("Error %d occured\n", (int)GetLastError());
    }
    strcat(verz,"C:/Users/");
    strcat(verz,username);
    strcat(verz,"/Destktop/test.txt");
    printf("Dein Text: ");
    fgets(text, 255, stdin);
    fp = fopen(verz, "w");
    fprintf(fp, "%s",text);
}

Я ожидаю, что на рабочем столе появился новый файл с некоторым текстом.

1 Ответ

0 голосов
/ 22 марта 2019

Когда вы пишете свой путь, вы делаете

strcat(verz,"C:/Users/");
strcat(verz,username);
strcat(verz,"/Destktop/test.txt");

Проблема в том, что verz не инициализируется, поэтому первый strcat вызывает неопределенное поведение , поскольку строка не пуста / завершается нулем.

Результаты могут отличаться, в вашем случае имя файла недопустимо и файл не создается, но вы этого не знаете, поскольку не проверяете возвращаемое значение fopen:

fp = fopen(verz, "w");
fprintf(fp, "%s",text);

Быстрое исправление будет:

strcpy(verz,"C:/Users/");

Одна строка с sprintf, быстрее и понятнее:

sprintf(verz,"C:/Users/%s/Desktop/test.txt",username);
fp = fopen(verz, "w");
if (fp!=NULL)
{
     fprintf(fp, "%s",text);
     fclose(fp);  // better close the file
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...