我在C程序中有一個非常奇怪的問題,其中變量互相覆蓋。我有一個可變logFilePath
其被這樣定義:在C覆蓋現有指針的字符串指針
logFilePath = pathToFile(logDirectory,argv[2]);
功能pathToFile是這樣實現的。
char *pathToFile(char *directory, char *file) {
char *filePath = malloc(sizeof(*directory)+sizeof(*file)+10);
int i;
for (i = 0; directory[i] != '\0'; i++) {
if (directory[i+1] == '\0' && directory[i] != '/') strcat(directory,"/");
}
strcat(filePath, directory);
strcat(filePath, file);
return filePath;
}
出於某種原因,logFilePath被完全不相關的函數修改。它被修改的功能就是這樣調用的
line = getIdentifierFromLine(line);
並執行。
char *getIdentifierFromLine(char *line) {
char *ident = malloc(sizeof(char)*30);
int i = 0;
printf("%s\n", ident);
while (line[i] != ';') {
ident[i] = line[i];
i++;
}
return ident;
}
問題是,logFilePaths片似乎是相同的身份證明,即前15個字符後的一半。將ident初始化爲logFileDirectory的前15個字符後的部分,並更改ident中每個char的值會更改logFileDirectory中的值。這裏是怎麼回事?
'的sizeof(*目錄)'和'的sizeof(*文件)'意思'的sizeof(char)的' – BLUEPIXY
我通過將pathToFile中的filePath的malloc更改爲sizeof(char)* 150'來解決此問題。我仍然不明白爲什麼我沒有得到分段錯誤? – stmfunk
filePath不是「」。更改'strcat(filePath,目錄);'到'strcpy(filePath,directory);' – BLUEPIXY