c的函示strtok

2007-07-24 12:51 am
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
int main()
{
char *x = "ntrh effewfew fewfew5", *z;
char a[] = "htrhtr thrtrhhg ft43 b35\n htr htr\n yjtj yjj";
z = strtok( "x", " " );
printf("%s", z );
system( "pause" );
return 0;
}

z = strtok( "x", " " );
為何這行會有問題呢??而且改成 z = strtok( "ntrh effewfew fewfew5", " " );也不行 是為什麼?改成這樣就行z = strtok( "a", " " );
難道不能用指標的形式嗎??
還有
char * 和 char [] 可以看成是同樣的東西嗎???
有些函式 的原形式 char * 可是卻可以 放char * 和 char []型態的變數

回答 (2)

2007-07-24 7:16 am
✔ 最佳答案
有好幾個地方錯誤:

1. 你宣告 char *x, 那你傳給 strtok 的應該是 x 這個變數, 而不是 "x"這個字串, 所以你說傳 "a" 可以, 一定是你看錯了, 不然就是你在po問題時誤加了引號

2. 更大的錯誤在 char *x="ntrh effewfew fewfew5"; 你宣告一個指標x, 沒有配置任何記憶體給他, 接著就指定一串字串給他, 這就是違法的行為, 程式一開始可以跑, 但 strtok 會去更改原字串, 當他寫東西下去的時候, 可能就寫到不該寫的地方, 引起程式中斷; 而 char a[]="....." 是宣告陣列, 同時會根據字串的長度去配置記憶體, 所以不會出問題, 也就是說: 重點在於傳入的那個參數所指的記憶體是不是是你可以使用的, 和 char *或char []無關

我改寫你的程式如下, 我傳的是指標, 而且可以正確執行:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
int main() {
char *x=(char *)malloc( sizeof(char)*100 ); // 明確的要了100個字元的記憶體
char *z;

strcpy(x, "ntrh effewfew fewfew5");
z = strtok( x, " " );
printf("%s", z );
system( "pause" );
free(x);

return 0;
}
2007-07-24 5:01 am
使用的方式如下:
//Power by Visual Studio 2005
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char* argv[]){
//==========START==========//
char string[]="BOOK(Knowledge=POWER)"; //字串
char sep[]="()="; //分隔字元
char *pStr; //用指標取出字串
pStr=strtok(string,sep); //取出第一個字串
while(pStr!=NULL){
printf("%s\n",pStr); //顯示字串
pStr=strtok(NULL,sep); //再次取出字串
}
//==========END==========//
printf("\n"),system("PAUSE");
return 0;
}

2007-07-23 21:02:10 補充:
請多多利用 MSDN


收錄日期: 2021-04-28 23:07:37
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070723000016KK07835

檢視 Wayback Machine 備份