C語言字串輸出亂碼,C語言,字串輸出是亂碼

2021-04-22 02:20:59 字數 5413 閱讀 6249

1樓:匿名使用者

輸出來亂碼是必須的,

因為你的數源據型別搞錯了bai,

你使用的是字元

du函式zhistringcopy()來拷貝字元;

那麼要處理的數dao據當是char型別,

然而你所定義的指標應當也是char型別;

你應當修改的地方是

int *str1,*str2;//請將int改為char

2樓:匿名使用者

將你程式中的所有int替換為char就對了。

c語言,字串輸出是亂碼

3樓:

#include

#include

#include

int random(int num);

void main()

printf("請依次輸入學生姓名:");

for(i=0;i被點到的同學的名字是:");

printf("%s ",p[random(n-1)]);

}int random(int num)

4樓:匿名使用者

你好沒有亂碼

就是邏輯上有些錯誤如圖:

5樓:匿名使用者

按照程式是在a字元

串中隔一個字元取一個形成b字串

void main()

half(a);

}輸出24680bdfhj

如果出亂碼,可能你的a陣列賦值方面有問題,不知道你是如何定義a陣列和呼叫函式的

6樓:匿名使用者

輸出亂碼是必須的,

因為你的資料型別搞錯了,

你使用的是字元函式stringcopy()來拷貝字元;

那麼要處理的資料當是char型別,

然而你所定義的指標應當也是char型別;

你應當修改的地方是

int *str1,*str2;//請將int改為char

7樓:匿名使用者

沒什麼問題,第一個for迴圈後多了一個分號;只要保證你傳入該函式的陣列a中有準確的二十個字元就行,如:char a=;

8樓:

while(1)

else }

9樓:匿名使用者

把讀迴圈改為 : while(fgets(str,120,fp) != null) printf("%s\n",str);

這樣就不需要直接檢查檔案是否結束,這是因為fgets()函式在讀滿120個字元或遇到'\n'時,就返回str的首址。在讀檔案時,測試是否到檔案結束經常出錯,我看見高手們都很少使用feof();函式,原因大概在此吧!

10樓:匿名使用者

原因向他們說的那樣, char a是一個區域性變數, 函式返回後他在棧上的空間就自動釋放了...

可以這樣改下:

#include

#include

#include

#include

using namespace std;

#define max_len 10

char* getnick()

return a;

}void main()

11樓:匿名使用者

getnick函式內的陣列a是區域性陣列,在棧上分配空間``,當getnick執行完後,棧空間會被**

可把a定義為全域性變數或動態申請空間(在堆中分配空間)

12樓:匿名使用者

getnick 返回的a,是一個區域性變數,當getnick返回後,這個變數就無效了,這個變數所指記憶體中的內容變得不可**,列印出來的當然不行了。你要麼把 a 宣告在函式外面,作一個全域性變數,要麼在getnick裡

static char a = ....;

13樓:匿名使用者

你的 str2 沒有加結束字元

加上 str2[n] = '\0';

就能濾掉後面的亂碼了

14樓:匿名使用者

if( !(file = fopen(name, "wb")))

你是以二進位制的方式開啟檔案的,用「w+」吧: fopen(name, "w+")

15樓:匿名使用者

#include

int main()

str2[n]='\0';

}puts(str2);

putchar('\n');

return 0;

}就是 str2 的結束加上結束符『\0』

c語言 字串輸出時最後出現亂碼

16樓:匿名使用者

輸出出現亂碼就是因為字串結尾並沒有結尾符'\0'。

gets函式讀入一行字串時,會在最末尾自動加上'\0'結尾。但是你在for迴圈內將s2的字元一個個拷貝到s中的時候,迴圈限定條件只到了s2字串的'\0'結尾符之前,所以輸出亂碼了。

將迴圈條件k

17樓:匿名使用者

#include

#include

int main()

{ int a,b,k;

char s1[1000],s2[1000],ex;

gets(s1);

gets(s2);

a=strlen(s1);

b=strlen(s2);//計算字串長度//char s[a+b+1];

memcpy(s,s1,a);//把s1放入s中//for(k=a;k

c語言列印字串亂碼問題

18樓:匿名使用者

#include

void reverse(char *p,char *q)}char *myitoa(int value,char * const string,int radix )

else

while(value)

if(sign)

reverse(string,s-1);

}*s='\0';

return string;

}int main(void)

19樓:匿名使用者

#include

#include

int main()

num[k] = '\0';

puts(num);

return 0;}

c語言輸出字串陣列出現亂碼

20樓:已存在這個名字

c語言字串以'\0'結尾,如果不以該符號結尾則輸出%s時會出錯,程式一直往存放字串的地址訪問。而你的程式中並沒有賦'\0'給那兩個陣列,所以會出現亂碼。

沒有出現亂碼的陣列是因為你初始化了,初始化時編譯器會給它加上'\0'符號。

21樓:匿名使用者

#include

int main(void)

}c語言中字串以'\0'結尾,你這樣迴圈50次把超過你輸入的字元範圍都讀出來了。

22樓:

字串陣列各字元單個賦值的話,你得主動在每串最後一個字元之後新增 '\0',表示串結束了,輸入時就沒有多餘的亂碼了,因為gets()或scanf() 的%s都是主動在串結束後新增了 '\0'的

23樓:匿名使用者

新增一個結束字元: a[i]='\0';

或者在初始化字元陣列a的時候,首先 初始化字元陣列a的記憶體,memset(a,0,40);

24樓:匿名使用者

由於hello 只有5個位元組,而str迴圈中輸出的是50個位元組的內容,剩下的45位元組的空間,都還沒有初始化過。

訪問未曾初始化的記憶體,就會出現意想不到的輸出結果(不應該這麼做)所以修改for迴圈為

for(i =0; str[i] != '\0'; i++)就可以了~ 其中'\0'是字串的結束符。

25樓:餛飩

字串是以/0結束為標誌的,出現亂碼的話,應該是沒有找到正確的/0或者,你把字串的/0重新賦值了。

char str = "hello, world !";

str[strlen(str)] = 4;//此時,字串就被破壞,會輸出亂碼。

26樓:匿名使用者

沒有**很難給你準確的答案,但是通常是輸出格式有誤引起的,看看printf函式的變數前有沒有寫了多餘的&取地址符或者檢查一下陣列有沒有越界

27樓:匿名使用者

肯定把'\0'輸出了 檢查一下判斷迴圈結束條件是否正確

28樓:被黑狂魔託雷斯

#include

int main()}

c語言 字串輸出時最後出現一個亂碼 **等

29樓:匿名使用者

for (i = 0; i <= len; i++)

兩個這個地方都要寫成 < 不能等於

30樓:鑄信

修改這裡:len = strlen(cs)-1;

c語言字串出現亂碼

31樓:匿名使用者

第6行改為:char a[100]=,b[100]=;

如果要輸出最終結果,沒必要每複製一個字元就輸出一次。將第25行刪掉。

32樓:勵志作大神

可以參考一下這個,講的很清楚:亂碼問題

>

codeblocks亂碼問題。它這個是codeblocks的,其他其實也差不

太多吧。關鍵是:

原始檔儲存編碼

編譯器解釋原始檔的編碼

生成執行檔案時的編碼

這三個一致,就不會有亂碼。

33樓:匿名使用者

你需要在拼接後在最後面加一個結束字元\0,如果沒有結束字元就會把後面的字元輸出。

34樓:祿飛馬欣榮

字串陣列各字元單個賦值的話,你得主動在每串最後一個字元之後新增'\0',表示串結束了,輸入時就沒有多餘的亂碼了,因為gets()或scanf()

的%s都是主動在串結束後新增了

'\0'的

c語言字元輸出,C語言輸入輸出字串

include int main d輸出的是有符號的整數,超過127的數字,在二進位制的最高位就是1了。那麼在後符號數的首位標記正負。如果是1,就是負數了。具體還是看看補碼運演算法則吧 c語言的字元是ascii編碼 標準的ascii碼只到127吧 沒記清楚 大概是這個數 char 的變數存的值太大直...

C語言字串問題,C語言中,字串是什麼?

這迴圈需要執行4次,對應的字元就是0001,也就是說這個sc需要5個空間,加一個 0 for i 0 i 2.你這個程式每次執行的結果可能是不確定的,因為你沒有初始化sc陣列,printf以字串的形式輸出,他是遇到 0 字元才結束的,所以為了保證程式的結果是一致的,建議初始化陣列。sc 5 這樣就可...

C語言字串問題

兩重圓括號純屬是多打了吧 你要是能看懂前面那條語句的話,後面那條語句其實差不多,賦值表示式的值等同於賦值號右端表示式的值,因此在str2 count2 0 的時候括號內表示式的值就是 0 也就是0,c中不存在布林型別,因此0表示假,非0皆為真。while str1 count1 str2 count...