1樓:匿名使用者
//因為沒有結束標識'\0'
#include
#include
void copy(char *, char *, int);
int main()
void copy(char *ar1, char *ar2, int n)
2樓:匿名使用者
因為copy
輸出字串是以'\0'結尾的,複製完後最後一位要寫上'\0'。
void copy(char *ar1, char *ar2, int n)就行了
c語言陣列輸出出現亂碼
3樓:匿名使用者
由於hello 只有5個位元組,而str迴圈中輸出的是50個位元組的內容,剩下的45位元組的空間,都還沒有初始化過。
訪問未曾初始化的記憶體,就會出現意想不到的輸出結果(不應該這麼做)所以修改for迴圈為
for(i =0; str[i] != '\0'; i++)就可以了~ 其中'\0'是字串的結束符。
4樓:匿名使用者
#include
int main(void)
}c語言中字串以'\0'結尾,你這樣迴圈50次把超過你輸入的字元範圍都讀出來了。
5樓:匿名使用者
這是因為你的陣列沒有初始化,而你要全部輸出,所以會這樣顯示,你可以利用strlen函式獲取到字串長度,然後再for迴圈裡把50換為這個長度strlen(str),就可以了,記得要加標頭檔案,#inclued
6樓:匿名使用者
不太嚴謹的改法是迴圈條件i<50改為str[i]!='\0'
7樓:被黑狂魔托雷斯
#include
int main()}
c語言輸出字串陣列出現亂碼
8樓:已存在這個名字
c語言字串以'\0'結尾,如果不以該符號結尾則輸出%s時會出錯,程式一直往存放字串的位址訪問。而你的程式中並沒有賦'\0'給那兩個陣列,所以會出現亂碼。
沒有出現亂碼的陣列是因為你初始化了,初始化時編譯器會給它加上'\0'符號。
9樓:匿名使用者
#include
int main(void)
}c語言中字串以'\0'結尾,你這樣迴圈50次把超過你輸入的字元範圍都讀出來了。
10樓:
字串陣列各字元單個賦值的話,你得主動在每串最後乙個字元之後新增 '\0',表示串結束了,輸入時就沒有多餘的亂碼了,因為gets()或scanf() 的%s都是主動在串結束後新增了 '\0'的
11樓:匿名使用者
新增乙個結束字元: a[i]='\0';
或者在初始化字元陣列a的時候,首先 初始化字元陣列a的記憶體,memset(a,0,40);
12樓:匿名使用者
由於hello 只有5個位元組,而str迴圈中輸出的是50個位元組的內容,剩下的45位元組的空間,都還沒有初始化過。
訪問未曾初始化的記憶體,就會出現意想不到的輸出結果(不應該這麼做)所以修改for迴圈為
for(i =0; str[i] != '\0'; i++)就可以了~ 其中'\0'是字串的結束符。
13樓:餛飩
字串是以/0結束為標誌的,出現亂碼的話,應該是沒有找到正確的/0或者,你把字串的/0重新賦值了。
char str = "hello, world !";
str[strlen(str)] = 4;//此時,字串就被破壞,會輸出亂碼。
14樓:匿名使用者
沒有**很難給你準確的答案,但是通常是輸出格式有誤引起的,看看printf函式的變數前有沒有寫了多餘的&取位址符或者檢查一下陣列有沒有越界
15樓:匿名使用者
肯定把'\0'輸出了 檢查一下判斷迴圈結束條件是否正確
16樓:被黑狂魔托雷斯
#include
int main()}
c語言,字串輸出是亂碼
17樓:
#include
#include
#include
int random(int num);
void main()
printf("請依次輸入學生姓名:");
for(i=0;i被點到的同學的名字是:");
printf("%s ",p[random(n-1)]);
}int random(int num)
18樓:匿名使用者
你好沒有亂碼
就是邏輯上有些錯誤如圖:
19樓:匿名使用者
按照程式是在a字元
串中隔乙個字元取乙個形成b字串
void main()
half(a);
}輸出24680bdfhj
如果出亂碼,可能你的a陣列賦值方面有問題,不知道你是如何定義a陣列和呼叫函式的
20樓:匿名使用者
輸出亂碼是必須的,
因為你的資料型別搞錯了,
你使用的是字元函式stringcopy()來拷貝字元;
那麼要處理的資料當是char型別,
然而你所定義的指標應當也是char型別;
你應當修改的地方是
int *str1,*str2;//請將int改為char
21樓:匿名使用者
沒什麼問題,第乙個for迴圈後多了乙個分號;只要保證你傳入該函式的陣列a中有準確的二十個字元就行,如:char a=;
22樓:
while(1)
else }
23樓:匿名使用者
把讀迴圈改為 : while(fgets(str,120,fp) != null) printf("%s\n",str);
這樣就不需要直接檢查檔案是否結束,這是因為fgets()函式在讀滿120個字元或遇到'\n'時,就返回str的首址。在讀檔案時,測試是否到檔案結束經常出錯,我看見高手們都很少使用feof();函式,原因大概在此吧!
24樓:匿名使用者
原因向他們說的那樣, char a是乙個區域性變數, 函式返回後他在棧上的空間就自動釋放了...
可以這樣改下:
#include
#include
#include
#include
using namespace std;
#define max_len 10
char* getnick()
return a;
}void main()
25樓:匿名使用者
getnick函式內的陣列a是區域性陣列,在棧上分配空間``,當getnick執行完後,棧空間會被**
可把a定義為全域性變數或動態申請空間(在堆中分配空間)
26樓:匿名使用者
getnick 返回的a,是乙個區域性變數,當getnick返回後,這個變數就無效了,這個變數所指記憶體中的內容變得不可**,列印出來的當然不行了。你要麼把 a 宣告在函式外面,作乙個全域性變數,要麼在getnick裡
static char a = ....;
27樓:匿名使用者
你的 str2 沒有加結束字元
加上 str2[n] = '\0';
就能濾掉後面的亂碼了
28樓:匿名使用者
if( !(file = fopen(name, "wb")))
你是以二進位制的方式開啟檔案的,用「w+」吧: fopen(name, "w+")
29樓:匿名使用者
#include
int main()
str2[n]='\0';
}puts(str2);
putchar('\n');
return 0;
}就是 str2 的結束加上結束符『\0』
C語言 for迴圈輸出陣列的問題
include include typedef int elemtype typedef int status typedef struct lnode lnode,linklist 如果i小於1或者大於表長加1,則返回error if p j i 1 s linklist malloc sizeo...
c語言陣列越界,C語言陣列(指標)越界訪問
第乙個和第二個陣列a 2 按指標說就是指向a 1 也就是30的記憶體下乙個位置,兩種程式排列不一樣,第二個下乙個應該是i的位置,第乙個不一定,可能是堆裡面的隨機數。恩。打個比方說有一天你去賓館訂了個房間。然後再牆壁上鑿了個洞看隔壁住著誰。後來又有一天你又去訂了乙個房間,然後又在牆壁上鑿了個洞看隔壁住...
c語言陣列問題C語言中用陣列解約瑟夫問題
答案是a 前2個 就表示乙個 字元 接著是141共三個字元 接著的 141表示乙個字元 abc三個字元 t製表符,乙個字元 所以總共9個字元 include include void main for i 0 i 5 i 放入新陣列printf n for i 0 i 5 i 輸出新陣列 求平均63...