数组通过函数返回时出错

时间:2018-03-06 06:25:46

标签: c string user-defined-functions

我需要从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);
}

2 个答案:

答案 0 :(得分: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++)

答案 1 :(得分: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);
}