gpt4 book ai didi

通过双指针字符串的引用调用

转载 作者:行者123 更新时间:2023-11-30 14:25:36 26 4
gpt4 key购买 nike

大家好,我在使用引用字符串作为参数的函数时遇到了一些问题。我读到你应该为此使用 e 双指针,但我无法让它工作。这是(部分)我的代码。

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(&currentCommand, 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¯ˇø.

我显然想要输入字符串的第二个单词,但我做错了。感谢您的帮助!

最佳答案

stringVal2 未初始化且从未填充:这就是打印垃圾的原因。在这种情况下不需要传递 char**,传递 char* 就可以了。然而,这个:

outputString = strTemp2;

不会将strTemp2的内容复制到outputString:它使outputString指向与strTemp2相同的地址>:使用strcpy()

<小时/>

例如,当函数为参数分配新缓冲区时,通常会将双指针(char**)传递给该函数(发布的代码中并非如此):

char* buf = NULL;
my_alloc(&buf);

void my_alloc(char** p)
{
*p = malloc(10);
}

关于通过双指针字符串的引用调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com