首页 > 解决方案 > 理解字符串返回的问题

问题描述

有谁知道为什么变量 s2 没有被打印出来。如果我不使用声明函数,则此代码有效,而只是将整个代码放在 main.js 中。但是,如果我尝试声明为 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;
}

标签: cstringfunction

解决方案


代码的多个问题:

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

#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

推荐阅读