|
|
|
Вопрос про strtok
|
|||
|---|---|---|---|
|
#18+
Привет всем. Подскажите пожалуйста, почему данный код в VS2005 вызывает ошибку доступа к памяти #include <stdio.h> #include <tchar.h> #include <iostream> int main( void ) { char* str = "a b c"; char *seps = " \n"; char *token1, *token2, *next_token1, *next_token2; token1 = strtok_s(str, " ", &next_token1); std::cout << (token1 == NULL); } хотя если объявить переменную str как массив (сhar str[] = "a b c") все работает? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 20:51 |
|
||
|
Вопрос про strtok
|
|||
|---|---|---|---|
|
#18+
Потому что strtok вбивает нолик прямо в буфер. То есть была на входе строка в памяти "a b c\0" стала "a\0b\0c\0" (\0 это нулевой байт). Объявляя строку "a b c" ты выделяешь в памяти шесть байт и заполняешь их этой строкой. Но если ты объявляешь: Код: plaintext Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 21:10 |
|
||
|
Вопрос про strtok
|
|||
|---|---|---|---|
|
#18+
А нельзя ли как-нибудь разбить строку char *str? ведь в сигнатуре функции написана именно char *str? То есть у меня в функцию передается указатель и надо разбить на токены. Как мне быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 21:21 |
|
||
|
Вопрос про strtok
|
|||
|---|---|---|---|
|
#18+
Использовать функцию strtok(). Она именно этим и занимается - разбивает строку на токены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.06.2006, 23:22 |
|
||
|
Вопрос про strtok
|
|||
|---|---|---|---|
|
#18+
kerzhА нельзя ли как-нибудь разбить строку char *str? ведь в сигнатуре функции написана именно char *str? Советую прочитать в любой книжке по С++ работу с массивами и указателями. Особенно ту часть, где говорится, что если объявлен массив a[n] (где n-любое положительное число >0), то запись a эквивалентна записи a[0], а+1 эквивалентна записи a[1] и т.д. Кроме того можно делать такие вещи: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2006, 06:34 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33822829&tid=2030915]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 513ms |

| 0 / 0 |
