內(nèi)存分配數(shù)據(jù)不對(duì)
#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;
}
下面是調(diào)試過程:
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個(gè)字節(jié),無論我怎么輸入,str打印出來的都是6個(gè)字節(jié),并不是實(shí)際長(zhǎng)度,還有就是為什 str 和 str3 的內(nèi)存之間相差的是16個(gè)字節(jié),而不是6個(gè)呢,str 的地址是?0x7fffffffdb00 , 而 str3 的地址是?0x7fffffffdb10
2020-03-22
應(yīng)該沒問題的,你把程序調(diào)試到return 0再去打印str和str3的地址,因?yàn)槟愕膕tr3都沒初始化系統(tǒng)應(yīng)該沒有給他分配存儲(chǔ)空間,程序還沒運(yùn)行到那里你就打印它的地址應(yīng)該不對(duì),我是這樣理解的
2018-07-26
沒有問題的