当前位置: 代码迷 >> C语言 >> 莫明其妙的错误
  详细解决方案

莫明其妙的错误

热度:147   发布时间:2007-01-08 02:06:23.0
莫明其妙的错误
我在打印一个数组是老是打印出一串莫名奇妙的中文
如:屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯


烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫

请问这是什么原因?
搜索更多相关的解决方案: 莫明其妙  

----------------解决方案--------------------------------------------------------

你倒是把程序写拿出来啊
----------------解决方案--------------------------------------------------------

是啊。。。。。。。。。。。。。。


----------------解决方案--------------------------------------------------------
二进制

----------------解决方案--------------------------------------------------------
或输出的东西越出有效值
----------------解决方案--------------------------------------------------------
在VC中跟踪时会遇到类似的字符串...
----------------解决方案--------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#define MAXSTRLEN 100
typedef unsigned char str[MAXSTRLEN+1];
void get_next(str T,int* next);
int Compare_char (str T,str S,int pos);

int next[MAXSTRLEN+1];
main()
{
str S,T,save;
int i,j,k=0;

gets(save);
printf("%s\n",save);


for(i=1;save[k]!=' ';i++,k++)
S[i]=save[k];
S[0]=i-1;

printf("%d %s",S[0],S+1);
k=i-1;
for(j=0;save[k]!=(unsigned char )NULL;j++,k++)
T[j]=save[k];
T[0]=j-1;
printf ("%d %s\n",T[0],T+1);
get_next(T,next);
if(Compare_char (T,S,1)==0)
printf("匹配没有成功");
else
printf("%s是%s的子串",T+1,S+1);
system("pause");
}

void get_next(str T,int* next)
{
int i=1,j=0;
next[1]=0;
while(i<T[0])
{
if(j==0||T[i]==T[j])
{++i;
++j;
next[i]=j;
}
else
j=next[j];
}
}

int Compare_char (str T,str S,int pos)
{
int i,j;
i=pos;j=1;
while (i<=S[0]&&j<=T[0])
{
if(j==0||S[i]==T[j])
{++i;
++j;}
else
j=next[j];
}
if(j>T[0]) return i-T[0];
else return 0;
}

字符串色打印出来后面总是 跟着中文,消也消不掉


----------------解决方案--------------------------------------------------------
这种错误一般是
1
给数组分配内存空间前没有清零,导致里面有随机值
2
如果数组的最后一个元素不是0,打印时就会打出紧接着它的后面的内存内容(很可能是随机值).
因为在C中,打印字符串时遇到\0才结束.

[此贴子已经被作者于2007-1-8 11:14:37编辑过]


----------------解决方案--------------------------------------------------------
怎么清零阿?
----------------解决方案--------------------------------------------------------
字符串要以'\0'结尾...
----------------解决方案--------------------------------------------------------
  相关解决方案