C字元陣列和字串陣列,在C中字元陣列和字串有什麼區別

2021-03-04 06:08:14 字數 2625 閱讀 2495

1樓:草原上之狼

實際上,字元陣列和普通陣列一樣,沒有本質區別。請大家注意陣列型別的含義:資料型別指的是陣列所包含的元素的型別,而不是陣列名的型別,陣列名永遠是乙個指標,指向第乙個元素的位址,即陣列首位址。

字元陣列的每個元素都是char型別,整型陣列的每個元素都是int型別。scanf() 和 printf() 函式有一種格式化字串 %s 可以用來整體輸入輸出字元陣列,但是沒有特定的格式支援 int 陣列整體陣列輸出。

在c++中字元陣列和字串有什麼區別

2樓:匿名使用者

唯一的區別就是字串末尾有乙個'\0'

面字元陣列是沒有的.

char ch1="hello";//該串有6個字元,5個可見字元,因為是串,所以末尾自動加上'\0';共六個

char ch2=;//這樣寫就成了陣列.是確確實實的5個字元

3樓:匿名使用者

字串都是以'\0'結尾,字元陣列只是單個字元的集合,只要在字元陣列某處加上'\0',也可轉換為字串

c++中字元陣列和字串有什麼區別,使用的時候,還有儲存什麼的。

4樓:

事實上字串是形如"abcd",在c++裡面是const char*或者char const*這樣,而字元陣列卻不是這樣,型別是char*。"abcd"這樣的字串文字量儲存在字串文字量裡面,而char或char*只算是乙個數字(數碼),下面是main.cpp檔案的例子:

#include

int main()

;std::printf("abcd");

std::printf("%s",v);

return "abcd"==&v[0];

}這一段**,在gcc下生成的彙編**是:

.file "main.cpp"

.def ___main; .scl 2; .type 32; .endef

.section .rdata,"dr"

lc0:

.ascii "abcd\0"

lc1:

.ascii "%s\0"

.section .text.startup,"x"

.globl _main

.def _main; .scl 2; .type 32; .endef

_main:

lfb9:

.cfi_startproc

pushl %ebp

.cfi_def_cfa_offset 8

.cfi_offset 5, -8

movl %esp, %ebp

.cfi_def_cfa_register 5

andl $-16, %esp

subl $32, %esp

call ___main

movb $97, 27(%esp)

movb $98, 28(%esp)

movb $99, 29(%esp)

movb $100, 30(%esp)

movb $0, 31(%esp)

movl $lc0, (%esp)

call _printf

leal 27(%esp), %eax

movl %eax, 4(%esp)

movl $lc1, (%esp)

call _printf

xorl %eax, %eax

leave

.cfi_restore 5

.cfi_def_cfa 4, 4

ret.cfi_endproc

lfe9:

.def _printf; .scl 2; .type 32; .endef

很明顯,"abcd"和char v = ;是完全不同的,這裡面乙個char如'a'實際的碼在系統裡面在影射到特定的文字量去。

字串放在字串文字量儲布區裡面,在main()結束後才會被銷毀。這個是可以確定的。

但是我不是做彙編的,不知道最精確的說法;但從上面的結果來看,很顯然

movb $97, 27(%esp)

movb $98, 28(%esp)

movb $99, 29(%esp)

movb $100, 30(%esp)

movb $0, 31(%esp)

就是把數字乙個乙個在放到對應的位址上去

而"abcd"則處理為.ascii "%s\0"這一分區段上去

5樓:

字元陣列 char a[100]; 可以隨便你對元素賦值常量字串 char* a = 'abcde'; 不能隨便賦值動態分配字串

char *a = malloc(100);

strncpy(a, 'abcd', 0);

拷貝了4個字元

6樓:

唯一的區別就是字串末尾有乙個'\0'作為結束標誌;字元陣列是沒有的.

簡單例子:

char ch1="hello";//該串有6個字元,5個可見字元,因為是串,所以末尾自動加上'\0';共六個

char ch2=;//這樣寫就成了陣列.是確確實實的5個字元

c語言字串陣列逆序問題,C語言字串陣列逆序問題

第乙個問題 字串陣列的長度不包括最後的 0 第二處問題 1 把 for i 0 str1 i 0 i 後面加上乙個分號 2 把for i 0 str1 i 0 i 後面的花括號去掉 3 再把 puts str1 前面的花括號去掉就可以了 程式如下 include stdio.h int main c...

C語言字串陣列

不是的,printf裡 s是通過後面的name定址到該記憶體單元,然後從該記憶體單元開始讀取資料,知道 0 字元結束。所以會把你輸入的東西輸出 是的,但是 s的含義是,把從這個位址開始的內容當作ascii碼依次輸出來,直到碰到 0 就是一種機械的做法 比如 int a printf s a 會輸出a...

c 中字元陣列,如何轉成字串啊

如果你想把一個字串變成陣列,你只需要將字串初始化為陣列變數的值即可。例如 char c 10 this is 在c 裡字串在記憶體的儲存方式就是按字串陣列的形式儲存的,所以不用轉換!用cstring的getbuffer函式返回一個存放字元的頭指標,用一個char 來接受他,然後用下標操作就可以了。例...