我想做的是反转用户输入的一串数字。它会编译并运行,直到我在 scanf
之后按回车键。然后我收到一些 Microsoft 运行时错误...出了什么问题???
注意:这是作业,但我已经弄清楚了逻辑。令我困惑的是这个错误。
#include <stdio.h>
int main()
{
unsigned int giveStr = 0;
char* charIt;
printf("Enter a number to be reversed.\t");
scanf("%d", &giveStr);
fflush(stdin);
sprintf(charIt, "%d", giveStr);
revStr(giveStr);
getchar();
return 0;
}
revStr(unsigned int n)
{
char buffer[100];
int uselessvar, counter = 0;
for (; n > 0;)
{
uselessvar = sprintf(&buffer[counter], "%d", n);
counter++;
}
for (counter = 0; counter > 0;)
{
printf("%c", buffer[counter]);
counter--;
}
return 0;
}
编辑:刷新换行符的标准输入:/还有图像here只是没有那个程序。和我的。
最佳答案
您正在尝试访问未分配的内存:
sprintf(charIt, "%d", giveStr);
将 char* charIt;
更改为 char charIt[50];
一切都应该很好(好吧,至少是段错误部分)
另外...将 charIt
传递给 revStr
,因为 charIt
包含带有我们数字的字符串。
然后,revStr
中的一个简单的 for 循环就可以解决问题(第二个循环的目的是什么?)
void revStr(char *giveStr)
{
int counter;
for (counter = strlen(giveStr)-1; counter >= 0; counter--)
{
printf("%c", giveStr[counter]);
}
printf("\n");
}
这将打印我们的字符表示从最后一个到第一个的每个字符。您应该阅读有关 for
循环的更多信息。
关于c - 反转用户输入的一串整数 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4911236/