【问题标题】:Problems understanding string return理解字符串返回的问题
【发布时间】:2020-05-24 12:36:23
【问题描述】:

有谁知道为什么变量 s2 没有被打印出来。如果我不使用声明函数,则此代码有效,而只是将整个代码放在 main 中。但是,如果我尝试声明为 int 函数或 void 函数,它不会打印任何内容。我认为这是我不理解的字符串的基本原理。

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


int reverseOrderString()
{
    char s1[100];
    char s2[100];

    int counter, end, begin = 0;

    printf("Type in a string\n");
    gets(s1);

    while(s1[counter] != '\0')
    {
        counter++;
    }

    end = counter-1;

    for (begin = 0; begin < counter; begin++)
    {
        s2[begin] = s1[end];
        end--;
    }

    s2[begin] = '\0';

   return s2;


}


int main()
{

    printf("%s", reverseOrderString());

    return 0;
}

【问题讨论】:

  • 您的函数返回int,但您返回的是char 数组。
  • 计数器也未初始化。
  • gets 非常不安全
  • 而你正在返回一个局部变量......这个小代码sn-p中的问题太多了。
  • 为什么要加入stdlib.h

标签: c string function


【解决方案1】:

多个代码问题:

  1. 未初始化的变量
  2. 返回函数返回后的本地数组不是有效内存
  3. 更改为 fgets

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

void reverseOrderString(char *s)
{
    char s2[100];

    int counter=0, end=99, begin = 0;

    printf("Type in a string\n");
    fgets (s2, 100, stdin);

    while(s2[counter] != '\0')
    {
        counter++;
    }

    end = counter-1;

    for (begin = 0; begin < counter; begin++)
    {
        s[begin] = s2[end-1];
        end--;
    }

    s2[begin] = '\0';
    return;
}

int main()
{
    char str[100];
    reverseOrderString(str);
    printf("%s\n", str);
    return 0;
}

输入:

Reverse me!!

输出:

!!em esreveR

【讨论】:

  • 该死,我不知道为什么我将函数声明为 int。我什至没有想到 s1 是局部变量,而不是全局变量。现在我还了解到,gets 是一个不好用的函数。我从您的反馈中学到了很多,我很感激。谢谢。
猜你喜欢
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 2012-11-12
  • 2017-10-11
  • 2019-12-27
  • 2020-05-26
  • 1970-01-01
相关资源
最近更新 更多