【发布时间】:2015-12-04 17:58:01
【问题描述】:
我试图让_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);
}
所以我希望得到一些指导,我的错误在哪里,我真的找不到它。
【问题讨论】:
-
在什么情况下不起作用?预期输出是什么,您看到的输出是什么?
-
@ch3rub7 根据MSDN
strrev已弃用,必须改用_strrev -
我得到了各种垃圾 och 字母,而不是颠倒的字符串。然后程序崩溃了。
-
将
&str更改为str并将char *str;更改为char str[1000];。这并不完全安全,因为如果您输入超过 999 个字符,scanf仍然可能超出缓冲区,但它应该可以帮助您开始。 -
调用
reverse("Okay")会导致未定义的行为,因为不允许您修改字符串文字。要解决这个问题,您可以使用字符串文字来初始化char的数组并将该数组传递给reverse。例如。char okay[] = "Okay"; reverse(okay);