C中的内存溢出混淆
Memory overflow confusion in C
这部分代码只是我在学校解决的一个任务。我应该做的就是打开文件 oblici.txt 并猜测里面的数字(10x10 字段由 # 和 - 显示数字)。所以,我错误地计算了字符串 s 的大小,而不是 11 我只分配了 10 个空格。问题是,它不会超过 2。好吧,我找到了一个解决方案(s[11] 并且有效)但无法弄清楚为什么这是一个问题。不仅仅是为什么这是一个问题,我知道溢出不是一件好事,但是当我有 if(b>0)
时它怎么能写 0(而不是 9)这清楚地消除了在数组中写 0 的可能性x
。我唯一的猜测是 '\0' 的值为 0 并且它被写在 b
内,但这没有意义......
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp=NULL;
int x[10],i,j=0,b=0;
char s[10];
fp=fopen("c:\temp\oblici.txt","r");
if (fp==NULL)
exit(1);
while(fscanf(fp,"%s",s)!=EOF){
for(i=0;i<10;i++)
if(s[i]=='-')
b++;
if(b>0)
x[j++]=b;
b=0;
}
for(i=0;i<j;i++)
printf("%d ",x[i]);
fclose(fp);
}
其中 oblici.txt 是:
因为每行末尾有一个换行符(\n
),所以每行一共11个字符。使用 10 会搞乱计算。
作为提示,顺便说一句,避免在 if
、for
和 while
语句周围不使用 {}
,因为这是引入错误的一种非常常见的方式!
这部分代码只是我在学校解决的一个任务。我应该做的就是打开文件 oblici.txt 并猜测里面的数字(10x10 字段由 # 和 - 显示数字)。所以,我错误地计算了字符串 s 的大小,而不是 11 我只分配了 10 个空格。问题是,它不会超过 2。好吧,我找到了一个解决方案(s[11] 并且有效)但无法弄清楚为什么这是一个问题。不仅仅是为什么这是一个问题,我知道溢出不是一件好事,但是当我有 if(b>0)
时它怎么能写 0(而不是 9)这清楚地消除了在数组中写 0 的可能性x
。我唯一的猜测是 '\0' 的值为 0 并且它被写在 b
内,但这没有意义......
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp=NULL;
int x[10],i,j=0,b=0;
char s[10];
fp=fopen("c:\temp\oblici.txt","r");
if (fp==NULL)
exit(1);
while(fscanf(fp,"%s",s)!=EOF){
for(i=0;i<10;i++)
if(s[i]=='-')
b++;
if(b>0)
x[j++]=b;
b=0;
}
for(i=0;i<j;i++)
printf("%d ",x[i]);
fclose(fp);
}
其中 oblici.txt 是:
因为每行末尾有一个换行符(\n
),所以每行一共11个字符。使用 10 会搞乱计算。
作为提示,顺便说一句,避免在 if
、for
和 while
语句周围不使用 {}
,因为这是引入错误的一种非常常见的方式!