2009-09-25 2 views
1
char *str = malloc (14); 
sprintf(str, "%s", "one|two|three"); 

char *token1, *token2, *token3; 
char *start = str; 

token1 = str; 
char *end = strchr (str, '|'); 
str = end + 1; 
end = '\0'; 

token2 = str; 
end = strchr (str, '|'); 
str = end + 1; 
end = '\0'; 

... 

free(start); 

делает это нормально работать должным образом, так как я устанавливал байты в str для нулевого значения, чтобы его токенизировать?c string tokenization question

+1

Рекомендуется использовать одно и то же имя переменной для malloc и free. В этом случае используйте «start» для malloc, а затем присвойте «str» значению «start». – selwyn

+0

ahh, хорошо, что имеет смысл – user105033

ответ

5

Да, это работает, бесплатно не волнует, где имеет место нулевое прекращение. Или даже если есть. Вы можете использовать malloc/free для любых типов данных, а не только строки с нулевым завершением.

3

бесплатный не проверяет содержимое данных. Итак, да, это правильно