Я пишу функцию, которая получает переменную окружения системы, разбивает каждый путь, а затем объединяет некоторые другие дополнительные символы в конец каждого пути.strcat() новая строка, повторяющаяся строка
Все работает нормально, пока не пользуюсь функцией strcat()
(см. Код ниже).
char* prependPath(char* exeName)
{
char* path = getenv("PATH");
char* pathDeepCopy = (char *)malloc(strlen(path) + 1);
char* token[80];
int j, i=0; // used to iterate through array
strcpy(pathDeepCopy, path);
//parse and split
token[0] = strtok(pathDeepCopy, ":"); //get pointer to first token found and store in 0
//place in array
while(token[i]!= NULL) { //ensure a pointer was found
i++;
token[i] = strtok(NULL, ":"); //continue to tokenize the string
}
for(j = 0; j <= i-1; j++) {
strcat(token[j], "/");
//strcat(token[j], exeName);
printf("%s\n", token[j]); //print out all of the tokens
}
}
Мой выход оболочки, как это (я конкатенации «/, который» на все):
...
/usr/local/applic/Maple/bin/which
which/which
/usr/local/applic/opnet/8.1.A.wdmguru/sys/unix/bin/which
which/which
Bus error (core dumped)
Я задаюсь вопросом, почему strcat
отображает новую строку, а затем повторить which/which
. Я также интересуюсь Bus error (core dumped)
в конце.
Кто-нибудь видел это раньше, используя strcat()
? И если да, то кто-нибудь знает, как это исправить?
Thanks
Это я или есть много незарегистрированных Стивов на SO? – 2008-10-04 03:05:11
Ваш код не содержит символов '*': char * pathDeepCopy = (char) malloc (strlen (path) + 1); символьный токен [80]; – bk1e 2008-10-04 03:41:54
@ bk1e: OP напечатал их, но SO интерпретировал их как курсивное форматирование. – 2008-10-04 04:39:32