我想做的是反转用户输入的数字字符串。发生的事情是它会编译并运行,直到我在输入文件后按Enter 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;
}
Run Code Online (Sandbox Code Playgroud)
编辑:刷新换行符的stdin:/并在此仅使用该程序进行映像。与我的。
您正在尝试访问未在以下位置分配的内存:
sprintf(charIt, "%d", giveStr);
Run Code Online (Sandbox Code Playgroud)
更改 char* charIt;为char charIt[50];,一切都应该正常(至少,分段错误部分)
另外...传递charIt给revStr,因为charIt其中包含带有我们编号的字符串。然后,一个简单的for循环revStr就可以解决问题(无论如何,第二个循环的目的是什么?)
void revStr(char *giveStr)
{
int counter;
for (counter = strlen(giveStr)-1; counter >= 0; counter--)
{
printf("%c", giveStr[counter]);
}
printf("\n");
}
Run Code Online (Sandbox Code Playgroud)
这将打印从最后一个到第一个我们的char表示形式的每个char。您应该阅读有关for循环的更多信息。