I'm trying to concatenate two strings to be used as a path for fopen(). I have the following code:
#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);
}
Error occurs at strcat(). What happened there?
And is it correct that I have to use deference operator for inputchar at fopen()?
Here are 3 things to fix:
You allocate space for exactly 1 character for inputchar. Thus getting a string longer than 0 characters with gets messes up your program's memory. Why longer than 0 character? Because gets writes a terminating 0 character at the end of the string. So allocate something more, eg
char *inputchar = (char*)malloc(256*sizeof(char));
absolutepath = "D:\\\\Files\\\\"; "D:\\\\files\\\\"
absolutepath = "D:\\\\Files\\\\"; "D:\\\\files\\\\"
is a string literal whose value is determined by the compiler. So you don't need to allocate space for that string with malloc. You can just say:
char *absolutepath = "D:\\\\Files\\\\";
When calling strcat, you give the pointer values to it, rather than the first characters of your strings. So you should do
strcat(inputchar, absolutepath);
instead of
strcat(*inputchar, *absolutepath);
I would recommend reading some beginners C resource, eg this http://www.learn-c.org/en/Strings could be good for you.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.