2016-09-05 8 views
-2
int main(void) 
{ 
    const char* line = "This isn't working"; 
    char* str[10]; 
    int index = 0; 

    for(int i = 0; i < 10; i++) 
    { 

     int j = 0; 
     str[i] = malloc(10 * sizeof(char)); 
     while(line[index] != ' ') 
     { 

      str[i][j] = line[index]; 
      j++; 
      index++; 
     } 
     index++; 
     if(index == strlen(line) - 1) 
      break; 


    } 

    for(int i = 0; i < 10; i++) 
    { 

     printf("%s\n", str[i]); 
    } 



} 

Я пытаюсь создать массив строк, где я хочу хранить слова из моей переменной «строка». Но код, который я написал, дает «ошибку сегментации», пожалуйста, помогитеВыполнение String Array возвращает ошибку сегментации

+4

Вы не нулевой оконечной ваши строки. – EOF

+0

... и вы не ограничиваетесь циклом, чтобы обеспечить, чтобы ваш придаток символов не перекрывал неконтролируемое выделенное пространство, которое, мы надеемся, приобрели. – WhozCraig

ответ

1

На образце строки "This isn't working" ваш while(line[index] != ' ') будет работать навсегда. Проверка длины выполняется только один раз, после этого цикла. Из-за этого у вас есть неопределенное поведение. Это может быть основной причиной вашей проблемы. Хорошая статья на эту тему "Undefined behavior can result in time travel".

Чтобы исправить это изменить while условие цикла к:

int strLength = strlen(line); 
while (index < strLength && line[index] != ' ') 
{ 
    // Do the job here 
} 
1

Строки C должны быть завершены с помощью NUL. После вашего внутреннего цикла вы можете сказать str[i][j] = '\0', чтобы исправить эту проблему.

Существует еще одна проблема с кодом: когда вы дойдете до последнего слова line, не будет места для завершения внутреннего цикла, поэтому внутренний цикл будет работать и работать, читая несвязанные память, пока вам не удастся добраться до космического персонажа в Never Never Land.

+0

Изменено значение null до [NUL] (https://en.wikipedia.org/wiki/Null_character) –

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