2015-02-07 79 views
1

我正在使用字符指針實現字符串複製函數,但它顯示錯誤。下面是代碼:使用字符指針的字符串複製錯誤

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char *s="abc"; 
    char *t; 
    while((*s)!='\0') 
    { 
     *t++=*s++; 
    } 
    *t='\0'; 
    printf("%s\n",t); 
    return 0; 
} 
+1

「它顯示錯誤」 - **錯誤是什麼**? – 2015-02-07 10:25:01

回答

7
char *t; 

沒有分配給您的指針內存,你正試圖寫它,這將導致不確定behavior.So分配內存

char *t = malloc(30); /* size of your choice or strlen(s) + 1*/ 

一旦完成使用免費內存使用它

free(t); 
1

這可能會導致segmentation fault

原因是:現在只是想指出char *t在哪裏?

讓我們來看看可能性:

貴國char *t指向其不能被訪問或寫保護某些內存位置;

2.它可能在某些情況下工作,其中指針指向一個可訪問的內存位置並且需要空間。這種可能性非常小。

所以,最好使用

char *t=NULL; 
t=malloc(sizeof(char)*n); //Dynamic approach 

這裏n是沒有字節如果你使用動態內存分配不舒服,現在 預留一些空間,讓您在分配給t

t你覺得夠用了。這會浪費一些空間。

完成後,釋放分配的空間;

free(t); 

注意:始終包括<stdlib.h>否則的malloc會導致一個警告。

+0

沒有必要在C中使用malloc/calloc/realloc的結果,也不建議以任何方式這樣做。不要做。 – alk 2015-02-07 15:26:36

+0

你是對的@alk。它自動將malloc返回的'(void *)'指針提升爲另一個指針類型。但是,如果您希望代碼在C和C++中都可用,則必須使用強制轉換。雖然在C中,它是一個完全的浪費,因爲它增加並隱藏了一些潛在的風險。 – psychoCoder 2015-02-08 07:44:09