数组通过函数返回时出错

问题描述 投票:-1回答:2

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

#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);
}
c string user-defined-functions
2个回答
0
投票

这里已经存在一个问题:所以如果你说这段代码是完美的,你希望我们调试它并解释它(在地球上)如何工作,那么你就去了。

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

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

return &str;

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

这同样适用于high功能。

建议:抛开这个糟糕的代码并首先获得初级C级编程书。阅读它并尝试一些代码。


一些改进的输入:(你可能不理解)

更改

void main()

int main(void)

为什么?请参阅这篇传奇帖子:What should main() return in C and C++?

其次,在两个函数中,你在循环中使用strlen(),它总是返回一个固定值。所以,而不是

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

我建议,

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

0
投票

您可以尝试以下代码和方法:

#include <stdio.h>
#include <string.h>

char* caseConverter (char *str)
{
    int i;
    for (i=0; i<strlen(str);i++)
    {
        if(str[i]>=65 && str[i]<=90)
        {
            str[i]=str[i]+32; //To lower case
        }
        else if((str[i]>=97 && str[i]<=122))
        {
            str[i]=str[i]-32; //To upper case
        }
        else
        printf("%c is not an alphabet \n",str[i]);
    }
    return str;
}
void main()
{
    char inputStr[50]= "Stubborn";
    char* opStr= caseConverter(inputStr);
    printf("Converted string is %s",opStr);
}
© www.soinside.com 2019 - 2024. All rights reserved.