對c下的指針總有一種畏懼感,動不動就出現各種錯誤,先看一段程序吧:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *buf; //定義char指針
char *string = "hello "; //指向常量數據區的“hello”字符串
buf = string; //將指向常量的指針賦值
printf("buf=%s\n ", buf);
strcpy(buf, "world"); //試圖將常量數據區的 "world"字符串拷貝給指向常量數據區的buf
printf("buf=%s\n", buf);
return 0;
}
於是在strcpy處,出現了段錯誤 Segmentation fault
解決辦法:
一、buf沒有空間, 應該用malloc分配空間
buf = malloc(4);
二、改變 string為:
char string[ ] = "hello";
這樣,string是指向數組的指針,賦值后,buf也是指向數組的指針,再次調用strcpy時,就把“world”復制到數組中了!
三、可以直接賦值:
buf = "world";
小結:指針只存貯了一個地址,想把整個字符串復制給他,必須手動分配內存空間,或存放於數組之中。
