У меня была очень странная проблема в программе на языке 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 символов. Идентификатор инициализируется части после первых 15 символов logFileDirectory и изменения значения каждого символа в идентификаторе изменяет его в logFileDirectory. Что здесь происходит?
'SizeOf (* каталог)' и 'SizeOf (файл *)' означает 'SizeOf (Char)' – BLUEPIXY
I удалось решить проблему, изменив malloc для filePath в pathToFile на 'sizeof (char) * 150'. Я все еще не понимаю, почему я не получил ошибку сегментации? – stmfunk
filePath не является "". change 'strcat (filePath, directory);' to 'strcpy (filePath, directory);' – BLUEPIXY