2015-02-07 53 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