字元陣列初始化亂碼,C語言陣列輸出出現亂碼

2022-06-29 11:01:49 字數 4004 閱讀 8179

1樓:匿名使用者

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

這段**是錯誤的輸出字串的方法!

正確方法為:

printf("%s", b ) ; //輸出一個字串或者,改為:

for(i=0;b[i]!='\0';i++) 字串的訪問到\0結束符就不要再輸出了!

至於你分配100就沒有亂字元,只能說明是偶然現象,也就是那塊記憶體沒有寫過資料,所以看不到相應的亂字元資訊

c語言陣列輸出出現亂碼

2樓:匿名使用者

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

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

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

3樓:匿名使用者

這是因為你的陣列沒有初始化,而你要全部輸出,所以會這樣顯示,你可以利用strlen函式獲取到字串長度,然後再for迴圈裡把50換為這個長度strlen(str),就可以了,記得要加標頭檔案,#inclued

4樓:匿名使用者

不太嚴謹的改法是迴圈條件i<50改為str[i]!='\0'

5樓:被黑狂魔託雷斯

#include

int main()}

字串賦值給字元陣列後亂碼

6樓:

粗略看了**,覺得不會有你說的那種情況。

c++中string 陣列初始化的問題。

7樓:開個玩笑別當真

顯然的嘛,如果改為trans=new string("123","456"),那麼trans[0]就是*trans了 而此時trans[1]沒有定義 所以會亂碼 亂碼原因是你訪問了沒有定義過的地方

8樓:篤俠

trans=new string;

應改為trans=new string("123");

9樓:

string sarr = ;

string *trans = sarr;

10樓:匿名使用者

string類

已知類string的原型為:

class string

; 你的寫法是錯誤的。

修改為:

string * trans;

trans = new string("123");

陣列定義:

string * trans;

trans = new string[2];

trans[0] = "123";

trans[1] = "456";

11樓:匿名使用者

你這是給座標賦值吧 trans不能設定成字串

c語言中如果字串陣列沒有初始化,那麼陣列名會指向**?

12樓:水上漂湯

char ar[10];這是定義一個擁有10個char型別元素的陣列,它被儲存在棧中,擁有自己的地址。

沒有初始化並不影響什麼,只是它的元素沒有初始值而已(編譯器會給它一個預設值)。

13樓:匿名使用者

char ar[10]; 已經指定了陣列的大小,在編譯的時候已經分配了記憶體的起始地址和大小。

一個c語言字元陣列問題,為什麼會出現亂碼

14樓:

char c是個字元陣列,不算是字串,因為沒有字串結束標記'\0'

改為char c=;就行了

謝謝採納

15樓:匿名使用者

char c的這種初始化方式,編譯器不會給你加結束符,把後面的地址空間的資料按照字元輸出,直到「恰好」遇到1個0被視為結束符,當然就是亂碼了。

怎麼對字元陣列初始化?

16樓:諾諾百科

char s=;

s陣列自動初始化為帶三個元素的陣列

如果是unsigned char型別,則只能使用前者形式了。

static char c=; 可寫為:

static char c=; 或去掉{}寫為:

static char c="c program";

當對全體元素賦初值時也可以省去長度說明。例如:static char c=;這時c陣列的長度自動定為9。

初始化字元陣列的初始化與數值型陣列初始化沒有本質區別。但它除了可以逐個給陣列元素賦予字元外,也可以直接用字串對其初始化。

如果在定義字元陣列時不進行初始化,則陣列中各元素的值是不可預料的。如果花括號中提供的初值個數(即字元個數)大於陣列長度,則出現語法錯誤。如果初值個數小於陣列長度,則只將這些字元賦給陣列中前面那些元素,其餘的元素自動定為空字元(即'\0')。

為什麼自定義一個函式,用它為char型別陣列賦值然後返回一個陣列,結果包含亂碼字元?下面的補充很詳細.謝謝.

17樓:suki尤

首先你這樣定義是在定義一個字元陣列而不是字串(為了方便說明,先將以字元陣列形式寫出來的加'\0'的形式成為字串。陣列名稱代表首元素地址,而字串可以用陣列名輸出直接為字串(ie:char a="string" cout<>>string)是因為字串有一個象徵結尾的'\0',電腦覺得很方便所以讀的時候直接讀到'\0』處而其他的陣列沒有一個表示停止的元素,所以電腦覺得還是預設每次讀一個吧於是cout一下出來首元素地址。

但是作為字元陣列(不是有停止的字串)本來應該cout出來一個首元素的地址的,但是字元陣列和用字元陣列表示的字串對於電腦來說都是字元陣列,所以處理的時候它直接當作你定義長度的時候少定義了一個,按照越界處理,就是預設你cout的其實是帶'\0』的字串,你定義位數的時候少了一個。

那如果不想加'\0』的話怎麼輸出陣列元素呢?答案是按照一般陣列輸出元素的方式:用迴圈

以上僅供參考哈哈哈,不是專業的,一點點個人的看法

18樓:倒黴熊

字元陣列的長度一般是字元的個數+1;這個1就是留給 '\0'使用的,作為字串的結束符。

也就是說,如果你的字元需要儲存26個字元,則你需要給27的長度。

#include

char *create(char *array,const int char_counts)

int main()

19樓:

樓主你好。

是因為判斷字串結尾是根據字元'\0'的,你建立一個陣列之後並沒有將內容初始化為0,新增完資料之後也沒有補上'\0',所以printf會將abcd之後的記憶體中未初始化的部分也輸出出來。

你可以char myarray[26]=;//將陣列元素全都初始化為0.

也可以:

char *create(char *array,const int char_counts)

這樣printf列印到d之後遇到'\0'就會停止列印了。

20樓:笑年

那是因為陣列最後一個你沒有加上結束符'\0',所以後面會跟一些亂碼

21樓:匿名使用者

分數真高。。

1.字元後加'\0',故假如你想儲存26個字元應宣告陣列長度為272.記住宣告變數一定初始化,這適合於絕大多數場合,也是程式設計規範。

3.覺得完全沒必要返回char*指標,因為你這操作本來就是對於指標如果操作成功已經更改了指標裡面的內容完成了賦值,函式宣告為void即可。

就是說void create(char *array,const int char_counts)

那麼你呼叫這個函式應該是這樣的,

int main()

C語言字串陣列問題

c語言中,賦值 與 賦初值 又叫初始化 是不一樣的。在定義變數的同時賦值,叫賦初值,而定義後賦值就是普通的賦值了。你說的 不能用賦值語句將一字串常量或字元陣列直接賦值給一個字元陣列 這句話是說普通賦值的情況,也就是,不能定義一個字元陣列以後,再給他直接賦值。而 char s 12345 這個語句,是...

c語言 檔案讀取 符 到字元陣列

可以通過fgetc函式,將字元讀取出來,並賦值到陣列的對應位置上。fgetc宣告在stdio.h中,其原型為int fgetc file fp 功能為從開啟的檔案fp中讀取一個字元,並返回。當讀取成功時,返回讀取到的字元的ascii碼值,否則返回eof。以下是逐個讀取字元,存於字元陣列,直到讀完整個...

C語言中,如何將陣列中的數值轉換成字串輸出

include void inttostr int i,char c,int len 需要注意的是,這裡沒有終結符,故需要知道陣列的 大小 陣列的大小是編譯時常量 char dest str 目標字串dest str char malloc sizeof char sizeof array 1 為字...