gpt4 book ai didi

c - 通过函数返回数组时出错

转载 作者:行者123 更新时间:2023-11-30 19:31:16 25 4
gpt4 key购买 nike

我需要从主函数中读取一个单词,如果第一个字符是 LCASE,则转换 UCASE 中的字符,反之亦然,使用用户定义的函数。我尝试了从函数返回数组的方法,但仍然缺乏一些核心思想。请调试这个程序并解释它的工作原理。

#include <stdio.h>
#include <string.h>
int* low (char str)
{
int i;
for (i=1; i<strlen(str);i++)
{
if(str[i]<91)
{
str[i]=str[i]+32;
}
else
{

}
}
return &str;
}
int* high (char str[50])
{
int i;
for (i=0; i<strlen(str);i++)
{
if(str[i]>91)
{
str[i]=str[i]-32;
}
else
{

}
}
return &str;
}
void main()
{
char str[50];
char* strl;
printf("Enter any string....\n");
scanf("%s",str);
if (str[0]<91)
{
*strl=low(str);
}
else
{
*strl=high(str);
}
printf("Converted string is %s.",*strl);
}

最佳答案

这里已经存在一个问题:因此,如果您说这段代码是完美的,并且希望我们对其进行调试并解释其(实际上)是如何工作的,那么您就可以了。

在函数中int* low (char str) ,你有if(str[i]<91) 。这就是问题所在。 strchar作为参数接收,因此 str[i]是一个直接的编译时错误。

另一个需要处理的是 return 语句。您有一个声明:

return &str;

这将返回 str 的地址,顺便说一下,这是 char ,而函数 low应该返回一个指向 int 的指针。

同样适用于high功能也一样。

建议:先把这些糟糕的代码放在一边,先买一本初级 C 编程书籍。阅读它并尝试其中的一些代码。

<小时/>

一些改进意见:(您可能不理解)

改变

void main()

int main(void)
为什么?引用这篇传奇帖子: What should main() return in C and C++?

其次,int您正在使用的两个函数strlen() in 循环将始终返回固定值。所以,而不是

for (i=0; i<strlen(str);i++)

我建议,

size_t strlength = strlen(str);
for (i=0; i < strlength; i++)

关于c - 通过函数返回数组时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49124607/

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