
C语言中什么样的数组需要清空?
比如:#include<stdio.h>#include<string.h>main(){intt;charinput[1010],output[1010],*p,*q;...
比如:#include<stdio.h>
#include<string.h>
main()
{
int t;
char input[1010],output[1010],*p,*q;
while(scanf("%d",&t)!=EOF)
{
getchar();
while(t--)
{
memset(input,'\0',sizeof(input));
gets(input);
p=input;
while(*p!='\0')
{
// memset(output,'\0',sizeof(output));
q=output;
while(*p!='\0'&&*p!=' ')
*(q++)=*(p++);
*q='\0';
printf("%s",strrev(output));
if(*(p++)==' ')
printf(" ");
}
printf("\n");
}
}
return 0;
}
注释的清空数组就可以不要,而没注释的那个清空就不能省 展开
#include<string.h>
main()
{
int t;
char input[1010],output[1010],*p,*q;
while(scanf("%d",&t)!=EOF)
{
getchar();
while(t--)
{
memset(input,'\0',sizeof(input));
gets(input);
p=input;
while(*p!='\0')
{
// memset(output,'\0',sizeof(output));
q=output;
while(*p!='\0'&&*p!=' ')
*(q++)=*(p++);
*q='\0';
printf("%s",strrev(output));
if(*(p++)==' ')
printf(" ");
}
printf("\n");
}
}
return 0;
}
注释的清空数组就可以不要,而没注释的那个清空就不能省 展开
5个回答
展开全部
你这个问题和清不清空没有关系,你这个是非常非常严重的问题,很多公司要开除的错误。
内存越界!!!!!!!!!!!!!!!!!!!!!!
这个语句是:
if(*(p++)==' ')
注意:*p=0,前面表示字符串已经结束
如果执行到这一句,p已经挪到了'\0'的后面,这个错误足够开除了!
有时候就是Segment fault。
因为不知道要做什么,没办法给你改,程序还需要提高很久!
#include<stdio.h>
#include<string.h>
main() {
int t;
char input[1010],output[1010],*p,*q;
while(scanf("%d",&t)!=EOF) {
getchar();
while(t--) {
gets(input);
p=input;
while(*p!='\0') {
q=output;
do{
*(q++)=*(p++);
} while (*p!='\0'&&*p!=' ');
*q=0;
printf("%s",strrev(output));
if(*p==0) {
break;
}
if(*p==' ') {
printf(" ");
p++;
}
}
printf("\n");
}
}
return 0;
}
内存越界!!!!!!!!!!!!!!!!!!!!!!
这个语句是:
if(*(p++)==' ')
注意:*p=0,前面表示字符串已经结束
如果执行到这一句,p已经挪到了'\0'的后面,这个错误足够开除了!
有时候就是Segment fault。
因为不知道要做什么,没办法给你改,程序还需要提高很久!
#include<stdio.h>
#include<string.h>
main() {
int t;
char input[1010],output[1010],*p,*q;
while(scanf("%d",&t)!=EOF) {
getchar();
while(t--) {
gets(input);
p=input;
while(*p!='\0') {
q=output;
do{
*(q++)=*(p++);
} while (*p!='\0'&&*p!=' ');
*q=0;
printf("%s",strrev(output));
if(*p==0) {
break;
}
if(*p==' ') {
printf(" ");
p++;
}
}
printf("\n");
}
}
return 0;
}
更多追问追答
追问
您好,我刚学C,有些东西不太懂,我有个不理解的地方:*p=0,前面表示字符串已经结束,这个我知道,这个时候p++指针就会变成野指针了,但是之后的程序我就不用指针p了啊(虽越界不受控了,但是我不用了啊)?循环之后p又重新赋初值了,不影响啊。
这个程序是要将一段英文每个单词(含标点)的字母倒序输出。
如:输入:I love China!输出:I evol !anihC
我想问的是为什么注释的清空数组就可以不要,而没注释的那个清空就不能省
追答
你把我给你的程序运行一下就好了。
就是因为“野指针”,而且不一定会重新初始化,因为\0后面可能没有\0。
“野指针”是严格的不允许的,你那些措施都不能防止野指针对程序的破坏。
这里以0表示\0,U表示不允许访问,S表示空格,D表示数据。你的程序需要的数据:
输入
3
DDDDSDDDD0UUUUU0
输出:
DDDDSDDDDSUUUUUS
如果memset输入变成
DDDDSDDDD0000000
输出变成
DDDDSDDDDSS(多出来的空格你看不见,实际上还是错误的)
就你的程序而言,只要一开始输入的数字足够大,比如2000,程序一定会崩溃。
展开全部
局部变量的数组,需要设定初值
全局变量的数组,系统自动设定初值
全局变量的数组,系统自动设定初值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
清不清空要看你程序的需要,而不是问别人。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看程序的需要
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把你的问题再描述得详细一些吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询