お世話になります
strtokの動作ですが
int main(void) { char str[] = "ABCD ef.1234.G"; char *tp; /* スペース.を区切りに文字列を抽出 */ tp = strtok( str, " ." ); puts( tp ); while ( tp != NULL ) { tp = strtok( NULL," ." ); if ( tp != NULL ) puts( tp ); } return 0; }
【実行結果】
ABCD ef 1234 Gであろうと思います、が区切り\0が出力されません(下記ダンプは下を実行後です)FFF049AE 39 36 30 30 20 45 20 38 : 20 31 00 20 2C 0D 09 00 9600 E 8 1 , FFF049BE 25 73 20 25 73 20 25 73 : 20 25 73 0D 00 20 2E 2C %s %s %s %s .,str[strlen(str)]=' ';str=strtok(str," ,\r\t");本来ならば39 36 30 30 00 45 であると思うのですが昨今のエラー発生で_s1ptr=NULL; // Remove the comment when you use strtok()(E) E0562310 E0562310:Undefined external symbol "__s1ptr" referenced in "DefaultBuild\resetprg.obj" gen.mtpj_s1ptr=NULL;をコメントアウトにしていることが関係しているのでしょうか?教えていただけないでしょうか、よろしくお願いします。
であろうと思います、が区切り\0が出力されません(下記ダンプは下を実行後です) FFF049AE 39 36 30 30 20 45 20 38 : 20 31 00 20 2C 0D 09 00 9600 E 8 1 , FFF049BE 25 73 20 25 73 20 25 73 : 20 25 73 0D 00 20 2E 2C %s %s %s %s ., str[strlen(str)]=' '; str=strtok(str," ,\r\t"); 本来ならば39 36 30 30 00 45 であると思うのですが
メモリをダンプされる箇所が全然違ってると思います。"9600 E 8 1~" とかってのはシリアル通信のパラメータかなんかでは?
ひょっとして以下の画面コピーに書き込んだように全く別のプログラム(=本来動かしたいもの)の話に突然話が飛んでいるのではないでしょうか?更に、このアドレス領域はRXではROM領域だと思います。str=0xFFF049AEであるならば当然str[strlen(str)]=' ';やstrtok(str," ,\r\t");で書き換わることは無いと思います。
fujita nozomu様wrote: said: であろうと思います、が区切り\0が出力されません(下記ダンプは下を実行後です) FFF049AE 39 36 30 30 20 45 20 38 : 20 31 00 20 2C 0D 09 00 9600 E 8 1 , FFF049BE 25 73 20 25 73 20 25 73 : 20 25 73 0D 00 20 2E 2C %s %s %s %s ., str[strlen(str)]=' '; str=strtok(str," ,\r\t"); 本来ならば39 36 30 30 00 45 であると思うのですが メモリをダンプされる箇所が全然違ってると思います。"9600 E 8 1~" とかってのはシリアル通信のパラメータかなんかでは? [引用終]
メモリをダンプされる箇所が全然違ってると思います。"9600 E 8 1~" とかってのはシリアル通信のパラメータかなんかでは? [引用終]