我正在使用字符指针实现字符串复制函数,但它显示错误。下面是代码:使用字符指针的字符串复制错误
#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;
}
我正在使用字符指针实现字符串复制函数,但它显示错误。下面是代码:使用字符指针的字符串复制错误
#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;
}
char *t;
没有分配给您的指针内存,你正试图写它,这将导致不确定behavior.So分配内存
char *t = malloc(30); /* size of your choice or strlen(s) + 1*/
一旦完成使用免费内存使用它
free(t);
这可能会导致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会导致一个警告。
没有必要在C中使用malloc/calloc/realloc的结果,也不建议以任何方式这样做。不要做。 – alk 2015-02-07 15:26:36
你是对的@alk。它自动将malloc返回的'(void *)'指针提升为另一个指针类型。但是,如果您希望代码在C和C++中都可用,则必须使用强制转换。虽然在C中,它是一个完全的浪费,因为它增加并隐藏了一些潜在的风险。 – psychoCoder 2015-02-08 07:44:09
“它显示错误” - **错误是什么**? – 2015-02-07 10:25:01