gpt4 book ai didi

c - 弦操作(切掉弦头)

转载 作者:行者123 更新时间:2023-12-02 09:33:58 24 4
gpt4 key购买 nike

为什么我无法获取“xxx”?返回值是一些很奇怪的符号...我希望返回值是xxx,但我不知道这个程序出了什么问题。该函数运行良好,可以为我打印“xxx”,但是一旦它返回值到主函数,字符串结果就无法很好地显示“xxx”。谁能告诉我原因吗?

char* cut_command_head(char *my_command, char *character) {
char command_arg[256];
//command_arg = (char *)calloc(256, sizeof(char));
char *special_position;
int len;
special_position = strstr(my_command, character);
//printf("special_position: %s\n", special_position);
for (int i=1; special_position[i] != '\0'; i++) {
//printf("spcial_position[%d]: %c\n", i, special_position[i]);
command_arg[i-1] = special_position[i];
//printf("command_arg[%d]: %c\n", i-1, command_arg[i-1]);
}
len = (int)strlen(command_arg);
//printf("command_arg len: %d\n", len);
command_arg[len] = '\0';
my_command = command_arg;
printf("my_command: %s\n", my_command);
return my_command;
}

int main(int argc, const char * argv[]) {
char *test = "cd xxx";
char *outcome;
outcome = cut_command_head(test, " ");
printf("outcome: %s\n",outcome);

return 0;
}

最佳答案

这里

my_command = command_arg;

将局部变量的地址分配给要返回的变量。该局部变量位于 cut_command_head() 的堆栈中。

函数返回后该地址无效。访问由 cut_command_head() 返回的内存会引发未定义的行为。

您需要在某个时间、某个地方分配内存。

最简单的方法是使用 strdup() (如果有的话):

my_command = strdup(command_arg);

一种可移植的方法是使用 malloc()然后复制有问题的数据:

my_command = malloc(strlen(command_arg));
if (NULL != my_command)
{
strcpy(my_command, command_arg);
}

这看起来也很奇怪:

len = (int)strlen(command_arg);
//printf("command_arg len: %d\n", len);
command_arg[len] = '\0';

只需删除它并在开头将 command_arg 初始化为全零,以确保它始终以 0 结尾:

char command_arg[256] = {0};

关于c - 弦操作(切掉弦头),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29331945/

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