Как вы используете strcat () из шапкиобъединить две строки с указателями? - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь объединить две строки, которые будут использоваться в качестве пути для fopen ().У меня есть следующий код:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>

void main() {
    char *inputchar = (char*)malloc(sizeof(char)), *absolutepath = (char*)malloc(sizeof(char));
    FILE *filepointer;

    gets(inputchar); //Name of the file that the user wants
    absolutepath = "D:\\Files\\";
    strcat(*inputchar, *absolutepath); //Error occurs here
    filepointer = fopen(*inputchar, "r"); //Do I need to use the deference operator?
    fclose(filepointer);
    free(inputchar);
    free(absolutepath);
}

Ошибка происходит в strcat ().Что там произошло?

И правильно ли я должен использовать оператор deference для inputchar в fopen ()?

1 Ответ

0 голосов
/ 30 мая 2018

Вот три вещи, которые нужно исправить:

  1. Вы выделяете место ровно для 1 символа для inputchar.Таким образом, получение строки длиной более 0 символов приводит к путанице в памяти вашей программы.Почему длиннее 0 символов?Потому что get записывает завершающий символ 0 в конце строки.Поэтому выделите что-то еще, например,

    char *inputchar = (char*)malloc(256*sizeof(char));
    
  2. absolutepath = "D:\\Files\\"; "D:\\files\\" - строковый литерал, значение которого определяется компилятором.Таким образом, вам не нужно выделять место для этой строки с помощью malloc.Вы можете просто сказать:

    char *absolutepath = "D:\\Files\\";
    
  3. При вызове strcat вы даете ему значения указателя, а не первые символы ваших строк.Таким образом, вы должны сделать

    strcat(inputchar, absolutepath);
    

    вместо

    strcat(*inputchar, *absolutepath);
    

Я бы порекомендовал прочитать ресурс C для начинающих, например, этот http://www.learn -c.org / en / Strings может быть полезно для вас.

...