亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

內存分配數據不對

#include <stdio.h>


int main() {

char str[] = "hello";

char *str2 = "world";


char str3[10];


printf("input a value\n");

scanf("%s", str);

//str[3] = '\0';


printf("str is %s\n", str);

printf("str2 is %s\n", str2);

printf("str3 is %s\n", str3);

return 0;

}

下面是調試過程:

Temporary breakpoint 1, main () at main.c:3

3 int main() {

(gdb) n

5 char str[] = "hello";

(gdb)?

6 char *str2 = "world";

(gdb)?

10 printf("input a value\n");

(gdb)?

input a value

11 scanf("%s", str);

(gdb)?

aaaaaaaaaaaaaaaaaaaa

14 printf("str is %s\n", str);

(gdb) p &str

$1 = (char (*)[6]) 0x7fffffffdb00

(gdb) p &str2

$2 = (char **) 0x7fffffffdaf8

(gdb) p &str3

$3 = (char (*)[10]) 0x7fffffffdb10

(gdb) p strt

No symbol "strt" in current context.

(gdb) p str

$4 = "aaaaaa"

(gdb) p str3

$5 = "aaaa\000\000\000\000P\005"


str 是6個字節,無論我怎么輸入,str打印出來的都是6個字節,并不是實際長度,還有就是為什 str 和 str3 的內存之間相差的是16個字節,而不是6個呢,str 的地址是?0x7fffffffdb00 , 而 str3 的地址是?0x7fffffffdb10

正在回答

2 回答

應該沒問題的,你把程序調試到return 0再去打印str和str3的地址,因為你的str3都沒初始化系統應該沒有給他分配存儲空間,程序還沒運行到那里你就打印它的地址應該不對,我是這樣理解的

0 回復 有任何疑惑可以回復我~

沒有問題的

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

內存分配數據不對

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號