resueltos - Copia de cadena en C que causa falla de segmentación
leer cadena de caracteres en c (4)
Intento copiar una cadena en otra variable de puntero char utilizando la función strcpy. Pero siempre obtengo un fallo de segmentación. Aquí está mi código.
/* 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;
}
Si hago lo mismo en este, sigo teniendo un error de segmentación.
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);
}
Recomiendo que primero asignes memoria antes de copiar datos a un lugar aleatorio.
strcpy(pch3=(char*)malloc(sizeof("Ravi")),"Ravi");
pero mejor verifique si no devolvió el puntero nulo.
pch3
asignar el espacio para pch3
antes de copiarlo. Use malloc
para crear una matriz de caracteres lo suficientemente grande como para acomodar los elementos de su cadena fuente antes de copiarla. Lo que está haciendo actualmente es declarar un puntero de char y no inicializarlo. Por lo tanto, la ubicación de la memoria a la que apunta podría estar en cualquier parte, y eso significa que probablemente no debería intentar escribir en ella, por lo que está obteniendo la segfault. El uso de malloc
le permitirá asignar una región de memoria en la que pueda escribir sin problemas y esto resolverá su problema (suponiendo que la llamada a malloc
correctamente). No puede ir escribiendo datos en ubicaciones de memoria aleatorias sin obtener segfaults y violaciones de acceso.
pch3
es un puntero no asignado, por lo que está escribiendo datos en una ubicación que no existe. ¿Querías asignarlo a str
?
char str[100]="";
char *pch3;
pch3 = str;
strcpy(pch3,"Ravi");
pch3
es un puntero de char, pero no tiene ningún almacenamiento asociado que sea la causa del problema. Llame a malloc()
para asignar algo de memoria que el puntero pch3
pueda señalar y usted debería estar bien.
En este punto, tiene un puntero de char que no está inicializado y apunta a un lugar desconocido. Entonces intente esto:
pch3 = (char *)malloc(sizeof(char) * 100); /* 100 just as an example */
Este tutorial puede ser útil o esta pregunta SO: Asignación de matriz de caracteres utilizando malloc