我试图使用strcpy函数将字符串复制到另一个char指针变量 . 但我总是得到分段错误 . 这是我的代码 .
/* strcat example */
#include <stdio.h>
#include <string.h>
int main()
{
char str[100]="";
char *pch3;
strcpy(pch3,"Ravi");
//strcat(str,pch3); //Segmnetation fault.
puts(pch3);
return 0;
}
如果我在这个中做同样的事情,我仍然会出现分段错误 .
else
{
misc_rec_cnt++;
fp1=fopen("breast-cancer-wisconsin-miscellaneous.data","a");
fprintf(fp1,"%s",line2);
fclose(fp1);
fp2=fopen("missingSCNs.data","a");
pch2=strtok(line2,",");
fprintf(fp2,"%s\n",pch2);
fclose(fp2);
//pch3=(char *)malloc(sizeof(char)*strlen(line3));
pch3 = strtok(line3,",");
while(pch3!=NULL)
{
if(strcmp(pch3,"?") == 0)
{
strcat(str1,"0");
strcat(str1,",");
}
else
{
//strcat(str1,pch3);
strcat(str1,",");
}
pch3 = strtok(NULL,",");
}
strlen1=strlen(str1);
memcpy(str2,str1,strlen1-1);
fp3=fopen("breast-cancer-wisconsin-miscellaneous-cleansed.data","a");
fprintf(fp3,"%s\n",str2);
fclose(fp3);
}
4 回答
在复制之前,需要为
pch3
分配空间 . 使用malloc
创建一个足够大的char数组,以容纳您复制它的源字符串 before 的元素 . 你目前正在做的是声明一个char指针而不是初始化它 . 因此,它指向的内存位置可以是任何位置 - 这意味着您可能不应该尝试写入它 - 这就是您获得segfault的原因 . 使用malloc
将允许您分配一个可以安全写入的内存区域,这将解决您的问题(假设调用malloc
成功) . 您不能只是将数据写入随机内存位置而不会遇到段错误和访问冲突 .pch3
是一个未分配的指针,因此您存在're writing data to a location that doesn' . 你的意思是将它分配给str
吗?pch3
是一个char指针,但它没有任何与之关联的存储,这是导致问题的原因 . 调用malloc()来分配一些pch3
指针可以指向的内存,你应该没问题 .此时你有一个未初始化的char指针,只是指向一个未知的地方 . 试试这个:
这个tutorial可能会有所帮助或者这个问题:Allocating char array using malloc
我建议您在将数据复制到随机位置之前先分配内存 .
但最好检查它是否没有返回空指针 .