こんにちは、引数として文字列を参照する関数を使用するといくつかの問題があります。私はあなたがこれのために電子ダブルポインタを使用すべきであることを読んだが、私はそれを働かせることはできません。 これは私のコードです(部分的に)。ダブルポインタで文字列を参照して呼び出す
enum errCode { ERR_NONE = 0, ERR_EMPTY, ERR_FULL, ERR_MEM, ERR_INIT, ERR_COMMAND, ERR_UNDEFINED };
typedef enum errCode ErrCode;
typedef enum {
no = 0, add, del, src, show, exit
} Command;
int main(void) {
char stringval[50];
char stringval2[50];
ErrCode err;
Command currentCommand = no;
printf("Enter a command\n");
if (fgets(stringval, 50, stdin) != NULL) {
char *p;
if ((p = strchr(stringval, '\n')) != NULL)
*p = '\0';
}
ErrHandler(
extractCommand(¤tCommand, stringval, &stringval2)
);
printf("stringval 2 = %s.\n", stringval2);
return 0;
}
ErrCode extractCommand(Command *command, char *inputString, char **outputString) {
char *strTemp;
char *strTemp2;
//Get the first word of the string
strTemp = strtok(inputString, " ");
strTemp2 = strtok(NULL, " ");
*outputString = strTemp2;
//Check if it equals a command
if (strcmp(strTemp, "exit") == 0) {
*command = exit;
return ERR_NONE;
} else if (strcmp(strTemp, "add") == 0) {
*command = add;
return ERR_NONE;
} else if (strcmp(strTemp, "del") == 0) {
*command = del;
return ERR_NONE;
} else if (strcmp(strTemp, "src") == 0) {
*command = src;
return ERR_NONE;
} else if (strcmp(strTemp, "show") == 0) {
*command = show;
return ERR_NONE;
} else {
*command = no;
printf("%s", strTemp);
return ERR_COMMAND;
}
}
これは私の出力は次のようになります。
Enter a command
add this is a test
stringval 2 = z˜ˇøÀo‡èK‡èT¯ˇø.
私は明らかに、入力された文字列の2番目の単語を持つようにしたいが、私は何か間違ったことをやっています。 Thxのヘルプ!
AREN:その関数が(投稿コードには当てはまらない)引数に新しいバッファを割り当てる場合
ダブルポインタは、例えば
char**
は、一般に関数に渡されます。コンパイラの警告が出ない? -Wallオプションでコンパイルし、警告メッセージの内容をお知らせください。 –それはコンパイルすべきではありません。 '&stringval2'は配列へのポインタであり、ポインタへのポインタではありません – newacct