2013-06-23 2 views
4

я следующий код:Как назначить char * символьному массиву?

int main(){ 

    char sentence[] = "my name is john"; 
    int i=0; 
    char ch[50]; 
    for (char* word = strtok(sentence," "); word != NULL; word = strtok(NULL, " ")) 
    { 
     // put word into array 
     // *ch=word; 
     ch[i]=word; 
     printf("%s \n",ch[i]); 
     i++; 

     //Above commeted part does not work, how to put word into character array ch 
    } 
    return 0; 
} 

я получаю ошибку: ошибка: invalid conversion from ‘char*’ to ‘char’ [-fpermissive] Я хочу, чтобы хранить каждое слово в массив, может кто-то помочь?

+2

'strcpy' является то, что вам нужно. Или, как вы его используете, возможно, 'char * ch [50];'? –

+0

У вас есть четыре слова, но только один массив. Итак, что именно вы имеете в виду, когда говорите, что хотите сохранить каждое слово «в массив символов»? – jogojapan

+1

Yeah strcpy поможет здесь, я использовал strcpy (ch [i], word); который также дает ту же ошибку –

ответ

4

Чтобы сохранить целый набор слов, вам понадобится массив слов или, по крайней мере, массив указателей, указывающих на каждое слово.

OP ch - это массив символов, а не массив указателей на символы.

Возможный подход будет:

int main() 
{ 
    char sentence[] = "my name is john"; 
    int i = 0; 
    char * ch[50] = {0}; /* This stores references to 50 words. */ 
    char * word = strtok(sentence, " "); /* Using the while construct, keeps the program from running into undefined behaviour (most propably crashing) in case the first call to strtop() wold return NULL. */ 
    while ((NULL != word) && (50 > i)) 
    { 
    ch[i] = strdup(word); /* Creates a copy of the word found and stores it's reference in ch[i]. This copy should to be free()ed if not used anymore. */ 
    printf("%s\n", ch[i]); 
    i++; 
    word = strtok(NULL, " ") 
    } 
    return 0; 
} 
+0

Большое спасибо алк, кто-то, пожалуйста, проголосуйте за этот ответ, у меня нет достаточного количества баллов, чтобы увеличить его :( –

+1

@ user2500861 скоро у вас будет, я просто поддержал вас ... – stdcall

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