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


謝謝各位的回答,因為分不多,所以就只能不好意思了,,但是還是謝謝大家的回答。。。
关注微信公众号

注意!

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



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