J'essaie de définir une variable pointeur globale qui peut alors vraiment être définie dans la fonction principale, comme indiqué ci-dessous. Cependant, je reçois une erreur de segmentation à chaque fois que j'essaie d'utiliser outputName
après cela. Je sais que cela a probablement à voir avec le réglage du pointeur égal à NULL
au début ... toute aide sur la façon dont je pourrais avoir un pointeur global qui est ensuite défini dans main serait très utile! Voici la partie de mon code qui me donne des erreurs:Erreur de segmentation avec des pointeurs globaux
char* outputName=NULL;
int isNumber(char number[]){
int i;
if (number[0]=='-'){
i=1;
}
while(number[i] != '\0'){
if (!isdigit(number[i])){
return 0;
}
i++;
}
return 1;
}
void catcher(int signo) {
printf("The program is exiting early");
remove(outputName);
exit(1);
}
int main(int argc, char *argv[]) {
if (argc != 4){
fprintf(stderr,"Incorrect number of arguments, must supply three.\n");
exit(1);
}
char* inputName = argv[1];
outputName=argv[2];
signal(SIGINT, catcher);
int result=isNumber(argv[3]);
if (result==0){
fprintf(stderr, "Invalid maximum line length, please enter an integer\n");
exit(1);
}
int maxChars= (atoi(argv[3]))+1;
if ((maxChars-1)<1){
fprintf(stderr, "Invalid third maximum line length, please enter an integer greater than zero\
.\n");
exit(1);
}
FILE* inFile = fopen(inputName, "r");
if (inFile==NULL){
fprintf(stderr,"Error while opening %s.\n", inputName);
exit(1);
}
FILE* outFile= fopen(outputName, "w");
if (outFile==NULL){
fprintf(stderr,"Error while opening %s.\n", outputName);
exit(1);
}
char line[maxChars];
int done=0;
while (!done){
char *readLine=fgets(line,maxChars,inFile);
if (readLine==NULL){
if (errno==0){
done=1;
}
else{
fprintf(stderr, "Error when reading line from input file");
exit(1);
}
}
int len=strlen(line);
if (line[len-1]!='\n'){
line[len]='\n';
line[len+1]='\0';
char current=' ';
while (current != '\n'){
current=getc(inFile);
}
}
if (!done){
fputs(line, outFile);
if (errno!=0){
fprintf(stderr, "Error when writing line to output file");
exit(1);
}
}
}
return 0;
}
Combien d'arguments passez-vous à 'main()'? avez-vous fait un débogage basique pour voir quelle est la valeur de 'argv [2]'? Avez-vous vérifié 'argc> = 3'? – John3136
en passant quatre arguments, oui fait toute cette vérification d'erreur pour s'assurer que la valeur de est correcte. – liverr1818
Donc, si 'outputName' est valide après le code ci-dessus, alors le problème est ailleurs ... – John3136