_strrev函数不在函数内部工作,但在

时间:2015-12-04 17:58:02

标签: c string reverse

我正在尝试使_strrev函数正常工作,但是当我将我的字符串放入函数中时,它似乎不起作用,就在我离开函数时... 我变得非常沮丧,因为我没有得到这个... 到目前为止,这是我的代码

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

void reverse(char *string) {
    char *str, temp;
    int begin = 0, end = 0;
    char word[64];
    int jaja = 0;

    printf("Your string from the function is %s\n", string);
    printf("%s\n", _strrev(&string)); //And why isnt this working
    jaja = strlen(string);
    printf("Your string has %d characters\n", jaja);
}
int main()
{
    char *str;
    scanf("%s", &str);
    printf("%s\n", _strrev(&str)); //How come this works

    reverse("Okay");

    getchar();
    return(0);
}

所以我很想得到一些错误的指导,我真的找不到它。

2 个答案:

答案 0 :(得分:2)

根据MSDN _strrev的原型是

char *_strrev(
   char *str 
);

如果你有char *string,你必须这样打电话:

printf("%s\n", _strrev(string));

在这种情况下

printf("%s\n", _strrev(&string));

您正在传递char**

答案 1 :(得分:1)

要回答您在代码评论中发布的问题:

int main()
    {
        char *str;
        scanf("%s", &str);
        printf("%s\n", _strrev(&str)); //How come this works

这很有用,因为你很幸运,因为你对scanf()的调用将其读取的内容放入用于指针str的实际内存中,并且你没有输入足够的数据引起问题。尝试在运行此程序时输入一个非常长的字符串,它也不会起作用。

您需要实际拥有一个char缓冲区来读取数据,如下所示:

int main()
    {
        char str[256];
        scanf("%s", str);
        printf("%s\n", _strrev(str));

int main()
    {
        char *str = malloc( 256 );
        scanf("%s", str);
        printf("%s\n", _strrev(str));

正如对问题的评论所指出的那样,你仍然可以超出你的缓冲区。