1 #include<stdio.h>
2 #include<string.h>
3
4 int main(){
5 char *a = "test...";
6 char *b = "1234567890";
7
8 //char *c = strncpy(a, b, 6);
9 //*(a + 1) = '1';
10 printf( "strncpy resulte : %s\n", strncpy(a,b,6) );
11 }
Segment fault後來發現當把程式碼第5行的*a改成a[]就可以秀出正確的結果,經過tryout大神的指點:
char *a等於是指向一個常數("test...",此常數為compile time時即決定,i.e.,非在run time時動態配置),因此當把pointer a指向"test..."後,就不能動態調整a的內容(如:*(a+1)='6', 當然上面code寫的strnpy(a,b,6)也會出錯,i.e.此function會更動到a的內容)。
所以程式碼第5行的*a改成a[]就ok,因為array是動態配置,所以可以更改其內容,
令一種方式:使用malloc當然也可( 如:char *c = malloc(10)。malloc也是動態配置)。
沒有留言:
張貼留言