gpt4 book ai didi

c - 在 C 中处理后获取字符串并返回相同的函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:13:03 28 4
gpt4 key购买 nike

我正在编写需要函数的代码。此函数获取一个字符串作为输入并返回一个字符串。

到目前为止,我的计划是获取一个 str[],删除所有 $ 和空格,并将其存储在稍后返回的另一个字符串中:

char *getstring(char str[])
{
int i=0;
char rtn[255];
while (i<strlen(str))
{
if (str[i] != " " || str[i] != "$" )
rtn[i] = str[i];
else
rtn[i] = '';
}
return str;
}

我觉得这行不通。有任何想法吗?? :-S

最佳答案

问题#1:
您的函数返回一个指向分配在堆栈上的(临时)字符串的指针。这意味着一旦您的函数结束,rtn 的内存就会被释放,并且这会使函数返回的char * 指针无效。。

你更愿意做的是:

void getstring(char str[], char rtn[])
{
/* Some processing on rtn... */
}

getstring 的调用者应该处理作为 rtn 传递的字符串的分配和释放。

问题#2:
您的 while 循环将无限期运行,因为 i 永远不会增加。将 i++ 放在循环内的某处。

问题#3:
if 语句中的条件有误。您将 str[i](它是一个 char)与 """$" 进行比较,它们是字符串文字(最后有 '\0')。这是错误的。
您需要将它们与字符进行比较,字符由撇号(而不是引号)表示。
另外,请注意测试条件也是错误的。您需要一个逻辑 AND 运算符而不是 OR。
if 语句更改为:

if (str[i] != ' ' && str[i] != '$')

问题#4:
rtn[i] = ''; 是什么意思? ''是一个空字符常量,在C中是非法的。
您是否只想跳过 str 中的一个字符?

问题#5:
你有索引问题。因为 strrtn 的长度可能明显不同,所以您需要管理两个运行索引,每个索引对应一个字符串。

问题#6:
rtn 在函数返回时不一定以 null 终止。在函数返回之前将 '\0' 分配到 rtn 的末尾(即 rtn[i] = '\0';while - 循环结束)。


这是你的代码,上面提到的所有问题都已修复:

void getstring(char str[], char rtn[])
{
int i = 0, j = 0;
while (i < strlen(str))
{
if (str[i] != ' ' && str[i] != '$')
rtn[j++] = str[i];
i++;
}
rtn[j] = '\0';
}

这里有一个更高效的版本,它使用指针而不是索引,并且不使用 strlen:

void getstring(char *str, char *rtn)
{
while (*str)
{
if (*str != ' ' && *str != '$')
*rtn++ = *str;
*str++;
}
*rtn = '\0';
}

关于c - 在 C 中处理后获取字符串并返回相同的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11273591/

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