Dev-C++ 处理字符串时出现乱码,是因为什么呢?????


请教各位,我在Dev c编译器里运行一程序,为什么会在显示的最后多个字符(乱码)呢?
 而且最郁闷的是,在网上碰到一朋友说他的不显示乱码,现把代码:
  
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int FString(char src[],char obj[],int flag)
{
  int i=0,j=0;
  int clag=0;
  int k=0;
  for(i=0;i<strlen(src);i++)
{
if((src[i]==' '&&src[i+1]!=' ')&&(clag<=1))
{
clag++;
}
if(clag<=1)
{
           if(clag<1)
obj[j++]=src[i];
   else
   {            
              if(k<=flag)
               obj[j++]=src[i];
               k++;
           }
}
}   
   return 0;  
}


int main()
{

char a[100]={"1234303  63.50345    12345       1"};
    char b[100];
FString(a,b,4);
if(b==" ")
 puts("error string\n");  
printf("b:%s\n",b);  
system("pause");
return 0;
}
目的是想显示出:1234303  63.5
但是实际却是:1234303  63.5>  这个弄了一个下午了,不知道是哪里错了,请告诉下解决方法。。。。

10 个解决方案

#1


src[i+1]这个就很危险,当i到了最后一个时,那么i+1可就越界了

#2


那应该怎么预防呢??/或者说怎么解决呢??

我在VC++下编译也是乱码了,

#3


你应该控制i在 数组长度-1 之内,你在for循环中做这个判断

#4


找到了!!一点小问题吧!!仅供参考:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int FString(char src[],char obj[],int flag)
{
  int i=0,j=0;
  int clag=0;
  int k=0;
  for(i=0;i<strlen(src);i++)
{
if((src[i]==' '&&src[i+1]!=' ')&&(clag<=1))
{
clag++;
}
if(clag<=1)
{
  if(clag<1) 
obj[j++]=src[i];
else
{   
  if(k<=flag)
  obj[j++]=src[i];
  k++;
  }

}  obj[j]='\0'; /*这里加上这句代码,说明结束否则会有乱码*/
  return 0;   
}


int main()
{

char a[100]={"1234303 63.50345 12345 1"};
  char b[100];
FString(a,b,4);
if(b==" ")
puts("error string\n");   
printf("b:%s\n",b);   
system("pause");
return 0;
}

#5


谢谢 cqltwslt 问题已经解决,但是可以说明下为什么要加obj[j]='\0'吗?
不是说字符串的最后会默认加'\0'的吗??

难道之前就是因为没'\0'而产生乱码了吗???

#6


数组的界限只是对程序员的约定,编译器对a[i]解析的时候,先得到a的首地址,然后偏移i*元素大小。

#7


就是说,解析字符串的时候,编译器会一直偏移下去,直到遇到存放'\0'的内存单元,而不管此时是否越界

#8


不知道你想干什么,是要在主串中找出按可控数量空格的字串并返回么?
那你这个还得改,功能并没有实现,不过还是贴上我给你改的代码,自己根据需求在改吧。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int FString(char *src,char *obj,int flag)
{
int i=0,j=0;
int clag=0;
int k=0;
for(i=0;i<strlen(src);i++)
{
if((src[i]==' '&&src[i+1]!=' ')&&(clag<=1))
{
clag++;
}
if(clag<=1)
{
if(clag<1) 
obj[j++]=src[i];
else
{   
if(k<=flag)
{
obj[j++]=src[i];
k++;
clag=0;
}
else
{
obj[j]='\0';
break;
}
}

}   

return 0;   
}


int main()
{

char a[100]={"1234303 63.50345 12345 123 145 1456 134"};
char b[100];
memset(b,0x00,sizeof(b)); //注意初始化
FString(a,b,4);
if(b==" ")
puts("error string\n");   
printf("b:%s\n",b);   
system("pause");
return 0;
}

#9


啊,偶也是菜鸟啊,也不是很清楚,只是以前遇到过,sorry~~无奈中

#10


谢谢各位的回答,因为分不多,所以就只能不好意思了,,但是还是谢谢大家的回答。。。
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告