編集:メモリ割り当て宣言を削除し、strlen(bufferPointer)をstrlen(inputLine)に変更しました。これは私の出力の奇妙なシンボルを取り除くように思われる。charポインタを返そうとしたときに奇妙な出力が発生しました
文字列の最初の単語を削除し、削除された単語のcharポインタを返すメソッドを作成しようとしています。この単語は削除されるため、文字列のサイズを小さくする必要があります。
私は奇妙な出力に遭遇していますが、私はなぜそれがわかりません。
私はかなり新しくて、ちょうどポインタのアイデアに慣れ始めているので、助けてくれれば助かります!
//global variables
char inputLine[] = "Hello there, my name is bob";
char *bufferPointer = inputLine;
char *nextWord();
main(){
printf("%s\n", nextWord());
}
char *nextWord(){
//calling a method that returns the number of words bufferPointer holds
int numOfWords = nwords(bufferPointer);
char *tmp2;
//Allocate memory to newArray
char *newArray = malloc(sizeof(char)*strlen(bufferPointer));
//create backup array
char backup[strlen(bufferPointer)];
strncpy(backup, bufferPointer, strlen(bufferPointer));
backup[strlen(bufferPointer)] = '\0';
//assign newArray pointer to backup array
newArray = backup;
//allocate memory to token (returned variable)
char *token = malloc(sizeof(char)*strlen(bufferPointer));
token = strtok(newArray, " ");
char *tmp = strchr(bufferPointer, ' ');
//move pointer to next word
if (tmp != NULL){
tmp2 = tmp;
bufferPointer = tmp +1;
}
return token;
}
旧出力は次のようになります。
there,
my
?²p
??
?²p?
?²p?
新しい出力は次のようになります。
there,
my
name
is
bob
'nextToken()'はどこに定義されていますか? –
'nextWord'、' nextToken' ??どちらですか? –
申し訳ありませんが、私は次の単語を意味しました。私はコードを編集しました。 – Shx