usar resueltos matriz leer funciones ejercicios ejemplos como caracteres cadenas cadena arreglo c string segmentation-fault

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