Я относительно новичок в C (и совершенно новичок в StackOverflow - привет, ребята!), И этот segfault не давал мне скорбеть последние несколько часов (DevC ++ на Windows-машине).Это просто простая палиндромная программа, но она действительно доставляет мне трудности.Я обычно не начинающий программист, как кажется здесь, но ... Боже мой.Теперь я помню, почему я так быстро хотел уйти от C ++ и Python.
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
FILE *outputFile;
char buffer[81];
char* strrev();
int bytesWritten;
char* strI = 0;
char *strrev(char str[])
{
char *p1 =NULL;
char *p2 =NULL;
if (! str || ! *str)
return str;
for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
{
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}
return str;
}
main()
{
int isPrime(int);
int i,j;
outputFile = fopen("DD:OUTPUT", "w");
if (outputFile == NULL)
{
printf("open error: %d/%s\n", errno, strerror(errno));
exit(99);
}
for (i=1; i<15000; i++)
{
if (isPrime(i)==1)
{
bytesWritten = sprintf(buffer,"%d is primepal!\n",i);
fwrite(buffer, 1, bytesWritten, outputFile);
}
}
fclose(outputFile);
return 0;
}
int isPrime(int myInt)
{
int loop;
for (loop = 2; loop < myInt/2+1; loop++)
sprintf(strI, "%s%d", 10, myInt);
{
if (myInt%loop==0 && (atoi(strrev(strI))-myInt)==0)
{
return 0;
}
return 1;
}
}
Я заранее прошу прощения, если это глупый вопрос, и ответ очень очевиден - но яофициально достиг предела, где, как бы логично ни был ответ, я слишком долго кодировал одну и ту же проблему, чтобы она имела какой-либо смысл.А также, сегфолты - это ужасные звери.Заранее спасибо за все, что вы можете предложить!
~ Иордания