[英]String copy in C causing segmentation fault
我試圖使用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);
}
在復制到pch3
之前,需要為pch3
分配空間。 使用malloc
創建一個足夠大的char數組,以便在復制之前容納源字符串的元素。 你目前正在做的是聲明一個char指針而不是初始化它。 因此,它指向的內存位置可以是任何位置 - 這意味着您可能不應該嘗試寫入它 - 這就是您獲得segfault的原因。 使用malloc
將允許您分配一個可以安全寫入的內存區域,這將解決您的問題(假設對malloc
的調用成功)。 您不能只是將數據寫入隨機內存位置而不會遇到段錯誤和訪問沖突。
pch3
是一個char指針,但它沒有與之關聯的任何存儲,這是導致問題的原因。 調用malloc()
來分配一些pch3
指針可以指向的內存,你應該沒問題。
此時你有一個未初始化的char指針,只是指向一個未知的地方。 試試這個:
pch3 = (char *)malloc(sizeof(char) * 100); /* 100 just as an example */
本教程可能會有所幫助,或者這個問題: 使用malloc分配char數組
pch3
是一個未分配的指針,因此您將數據寫入不存在的位置。 你的意思是把它分配給str
嗎?
char str[100]="";
char *pch3;
pch3 = str;
strcpy(pch3,"Ravi");
我建議您在將數據復制到隨機位置之前先分配內存。
strcpy(pch3=(char*)malloc(sizeof("Ravi")),"Ravi");
但最好檢查一下它是否沒有返回空指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.