Posted on 2007-10-17 21:06
謝龍飛 閱讀(207)
評(píng)論(0) 編輯 收藏 引用
今天在linux做幾個(gè)進(jìn)程通信的實(shí)驗(yàn)老出錯(cuò),搞了半天原來字符輸入輸出引起的錯(cuò)誤
注意:
在C語(yǔ)言中print函數(shù)可以通過指針來訪問 字符串
例如如下的代碼:
#include <stdio.h>
void main(void)
{
int i;
char *a="hello";
printf("%s\n",a);
}
在這段代碼中指針a 指向的是"hello"這個(gè)字符串(我的理解是實(shí)際指向的是一個(gè) "hello\0"字符串,因?yàn)橄到y(tǒng)自動(dòng)為字符串常量加一個(gè)'\0'表示字符串結(jié)束
例如如下的代碼:
char a[5]={"hello"};
系統(tǒng)會(huì)報(bào)錯(cuò),這是為什么呢???
答案是在存儲(chǔ)字符串常量時(shí) 系統(tǒng)自動(dòng)給字符串末尾加了一個(gè)'\0'
因此這個(gè)時(shí)候數(shù)組長(zhǎng)度不夠當(dāng)然會(huì)報(bào)錯(cuò)了
應(yīng)該如下定義和賦值:
char a[6]={"hello"};
還有一個(gè)未解決的問題是:
通過
char *a="hello";
語(yǔ)句之后 是不是*a='h' ,*(a+1)='e'......以此類推
我在VC上實(shí)驗(yàn) 情況到是這樣的
明天在好好看下 C語(yǔ)言中的字符串那章
以前學(xué)的時(shí)候就沒怎么看 因?yàn)殛P(guān)于字符和字符串操作的函數(shù)實(shí)在是太多了
數(shù)組和指針也是也它有很大的關(guān)系