C++错误问题

来源:百度知道 编辑:UC知道 时间:2024/06/13 23:41:43
这是我的程序:
#include <stdio.h>
#include <string.h>
void main()
{
int i,n;
char string[81],s;
gets(string);
n=0;
while(string[n]!='\0')
n++;
for(i=0;i<n/2;i++)
{
s=string[i];
string[i]=string[n-i-1];
string[n-i-1]=s;
}
for(i=0;i<n;i++)
printf("%s\n",string[i]);
}
编译没错.可是调试时就出了以下问题:
Unhandle exception in 12.exe:0xc0000005:Access Violation.
请帮我下.谢谢

最后一句打印出错.
string[i]是一个字符,你怎么可以%s打印呢?
应该改成:
for(i=0;i<n;i++)
printf("%c",string[i]);
printf("\n");
或者去掉上面的循环.
直接
printf("%s\n",string);

gets(string)

改成

scanf("%s",string)

最后一句 printf("%s\n", string);

printf("%c",string[i]); // %c

printf("\n"); //末尾加'\n'

#include <stdio.h>
#include <string.h>
void main()
{
int i,n;
char string[81],s;
gets(string);
n=0;
while(string[n]!='\0')
n++;
for(i=0;i<n/2;i++)
{
s=string[i];
string[i]=string[n-i-1];
string[n-i-1]=s;
}
printf("%s\n",string);
}
错误的原因是 所要输出的数据与你所采用的格式不一致,你是逐字符输出 但却用了字符串格式输出。%s的后面应该是一个字符串的首地址,编译器将你的string[i]转化成地址值去访问 结果就造成了内存的访问错误,即访问你没有申请的空间.