c輸出結果非常奇怪,C語言輸出結果是一串很奇怪的數字

時間 2021-05-02 12:10:44

1樓:enjoy冰心玉壺

在主函式main中定義了兩個字元陣列a1和a2,都是字串常量初始化方式,記憶體分配時會在字串尾部儲存乙個空字元'\0'。然後呼叫自定義函式insert,先求兩個字串的長度(不包含結尾的'\0'),所以n1等於5,n2等於3。

然後看第乙個for迴圈,i的初值為4,j的初值為7。迴圈條件是i>2,第一次s1[7]=s1[4],賦值語句,把s1[4]的字元『e』賦值給s1[7]。第二次s1[6]=s1[3],把s1[3]的字元『d』賦值給s1[6],然後下一次不再滿足迴圈條件,退出迴圈。

第二個for迴圈,i的初值為2。迴圈條件是*s2!='\0'。

指標變數s2指向a2,也就是字元陣列a2中的字元不為'\0'。第一次s1[2]=*s2,把a2的第乙個字元'a'賦值給s1[2]。第二次s1[3]=*s2,把a2的第二個字元'b'賦值給s1[3]。

第三次s1[4]=*s2,把a2的第三個字元'c'賦值給s1[4]。然後下一次不再滿足迴圈條件,退出迴圈。

所以最後s1[6]等於'd',s1仍然指向字串a1,不過變為'ababc',在上面所說的第二個for迴圈中重新複製了。當然a1也變為'ababc'。因為printf("%s\n",s1)遇到第乙個'\0'就會結束,所以輸出的結果都是'ababc'。

看一下指標的知識就能理解這個程式了。基本就是這個過程吧。

2樓:布克斯逸

這樣就對了:

#include

#include

void insert(char *s1,char *s2,int f)

for(i=f-1;*s2!='\0';i++,s2++)s1[n1+n2]='\0';

n1= strlen(s1);

printf("%d,%d,%c\n",n1,n2,s1[6]);

printf("%c\n",s1[6]);

printf("%s\n",s1);

}int main()

,a2="abc";

int f=3;

insert(a1,a2,f);

printf("%s",a1);

return 0;}

c語言輸出結果是一串很奇怪的數字

3樓:小帆向前衝

這些奇怪的數字是位址,因為按你這個程式走,應該是順序輸出b[4],b[3],b[2],b[1],b[0],但是b[4]和b[3]在你輸入567的時候是沒有存入數的,所以輸出不對

這樣就好了:

#include

int main()

printf("%d\n",i+1);

s=i;

for(;s>=0;s--)

printf("%d",b[s]);

printf("\n");

return 0;}

4樓:

是你的陣列後面的元素沒有賦值,輸出的不確定的值。這個題不必要陣列來實現.

你不是想輸入乙個數然後輸出他是幾位數?還有這幾位數是什麼麼?

直接在每次迴圈的過程中將這些數字輸出即可,再者你每次輸入的資料的位數不同,必定會浪費記憶體

5樓:唔知吳魏

b[4]和b[3]沒有賦初始值,所以是隨機值,應該是定義陣列b時初始化,int b[5]=;

6樓:hwllo泠泉石上

樓主這個程式你要幹嘛。。。

7樓:匿名使用者

你給b[5]賦初值為0

c語言,以下程式的輸出結果是,C語言問題 以下程式的輸出結果是?

輸出1 3 這是遞迴了,所以先是fun 3 進入後發現3 2 1,所以又繼續func 3 2 也就是fun 1 進入發現1 2 0,就執行prinft,輸出1,然後fun 1 就返回了 返回出去正好是fun 3 的prinft,輸出3 進入fun 3 進入fun 1 輸出1退出fun 1 輸出3退出...

c語言中float輸出的結果從左往右有效數字是6位,但是我編寫這個小程式後怎麼就只有3位有效?望高手解答

想要搞清楚這個問題,你需要了解float型別在記憶體中的儲存結構 符號位 指數 尾數 78.88在記憶體中的結構為 01000010 10011101 11000010 10001111 第一位為符號位,0 後面八位為指數位10000101 最後23位為尾數0011101 11000010 1000...

C語言初級有以下程式段輸出結果是

for i 1 i 15 j 4 一定是給錯了,應該是for i 1 i 15 i 4 取4個值1,5,9,13 for j 3 j 19 j 4 m 會執行5次m 也就是m 5,j分別取3,7,11,15,19 兩個迴圈是巢狀關係,合計執行為4 5 20。 外層迴圈應該是 for i 1 i 15...