2015-04-29 4 views
-1
const char * pathArray[50]; 
char nextFile[35]; 

while(lastFile == 0) { 
    file_descriptor = open(nextFile, O_RDWR); 

    if (file_descriptor == -1){ 
     printf("Sorry, but %s could not be opened", nextFile); 
     exit(1); 
    } 

    nread = read (file_descriptor, buffer, 512); 
    close(file_descriptor); 

    if(strstr(buffer, "LAST_FILE") != NULL){ 
     lastFile++; 
     break; 
    } 

    printf("CURRENT FILE: %s\n", nextFile); 
    printf("\n NEXT FILE:"); 
    scanf(" %[^\n]", nextFile); 
    pathIndex++; 
    pathArray[pathIndex] = nextFile; 

    for(i = 0; i < pathIndex; i++) { 
     printf("%d: %s\n", i, pathArray[i]);   
    } 
} //end while 

То, что я не ожидал, это pathArray [pathIndex] = nextFile; присваивает адрес nextFile этому индексу, поэтому весь массив изменяется, когда nextFile делает. Я очень новичок в C и много раз пробовал и обнаружил множество проблем с получением всего имени файла (у многих имен файлов есть пробелы в них, поэтому он должен быть прочитан до тех пор, пока пользователь не войдет в него, и выше был способ, которым я нашел, чтобы предотвратить отключение имени файла в первом пространстве).Как я могу назначить элементы массиву const char * из обычного массива char в цикле?

Я также попытался добавить символ * otherArray [50], так что я мог бы использовать STRCPY, но изменить свое задание:

strcpy(otherArray[pathIndex], nextFile); 
    pathArray[pathIndex] = otherArray[pathIndex]; 

вызывает ошибку сегментации. Может ли кто-нибудь помочь?

+0

Трудно понять, чего вы действительно хотите достичь, но из того, что я действительно понимаю, вы в значительной степени ошибаетесь. Зачем вам нужна переменная 'const char *' вверху, почему бы вам не использовать 'char *' без 'const'? – GergelyPolonkai

+0

Назначение одного массива другому - это не то, что вы намерены делать, я считаю. Попробуйте 'strcpy (pathArray [pathIndex], nextfile);' Вам также нужно выделить правильную память, необходимую в вашем 'pathArray [index];' Это, как говорится, есть много, что здесь не имеет особого смысла. – bentank

+0

По какой-то причине он вызывает ошибки сегментации (когда я пытаюсь использовать strcpy), и когда я не использую strcpy, у него такая же проблема. EDIT: Извините, я опубликовал до того, как Бентанк прокомментировал. Как выделить правильный объем памяти для pathArray [pathIndex]? – Follow

ответ

2

Я считаю, что вы ищете что-то вроде этого

char *pathArray[50]; 
char nextFile[35]; 
int pathIndex = 0; 

// Do something to read into nextFile? 
// create new mem for string and assign pointer to new string in your array 
pathArray[pathIndex++] = strdup(nextFile); 

Причины это сегментный разлом происходит из-за не выделяя какую-либо памяти для строки внутри вашего массива.

От strdup человек страницы:

Функция strdup() возвращает указатель на новую строку, которая является дубликатом строки с. Память для новой строки - , полученная с помощью malloc (3), и ее можно бесплатно освободить (3).

Примечание: вы должны освободить только что созданную копию.

+0

'pathIndex' должен быть' size_t' вместо 'int', действительно. –

+1

@IskarJarak, в данном случае это не имеет значения. Если INT_MAX не меньше 50 ... И для int должно быть 16 бит или больше, это не так. – bentank

+1

Я хорошо знаю, что «в данном случае это не имеет значения», но лучше использовать 'size_t', и я думаю, что ваш ответ будет улучшен. –

Смежные вопросы