使用字符指针的字符串副本中的错误

时间:2015-02-07 10:22:49

标签: c string pointers

我正在使用字符指针实现字符串复制功能,但它显示错误。这是代码:

#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;
}

2 个答案:

答案 0 :(得分:7)

char *t;

没有为你的指针分配内存而你正试图写入它会导致未定义的行为。所以分配内存

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

使用内存完成后,使用

释放它
free(t);

答案 1 :(得分:1)

这可能会导致segmentation fault

原因是:想想char *t现在指向哪里?

让我们来看看可能性:

1.您的char *t指向一些无法访问或写保护的内存位置;

2.在某些情况下,你的指针指向一个可以访问并具有所需空间的内存位置,它可能会起作用。这种可能性非常小。

所以,最好使用

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

这里n是您分配给t

的字节数

如果您现在对动态内存分配不满意 为t保留一些您认为足够的空间。这会浪费一些空间。

完成后,释放分配的空间;

free(t);

注意:始终包含<stdlib.h>其他malloc将导致警告。