我正在尝试连接两个字符串以用作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()发生错误。那里发生了什么?
我必须在fopen()使用deference运算符来输入是否正确?
答案 0 :(得分:2)
以下3件事需要解决:
为inputchar分配1个字符的空间。因此,获取长度超过0个字符的字符串会弄乱程序的内存。为什么长于0个字符?因为gets在字符串的末尾写了一个终止的0字符。所以分配更多东西,例如
char *inputchar = (char*)malloc(256*sizeof(char));
absolutepath = "D:\\Files\\"; "D:\\files\\"
是一个字符串文字,其值由编译器确定。因此,您不需要使用malloc为该字符串分配空间。你可以说:
char *absolutepath = "D:\\Files\\";
调用strcat时,会为其指定值,而不是字符串的前几个字符。所以你应该做
strcat(inputchar, absolutepath);
而不是
strcat(*inputchar, *absolutepath);
我建议阅读一些初学者C资源,例如这http://www.learn-c.org/en/Strings可能对你有好处。