j6m*_*6m8 1 c char segmentation-fault
我是C的新手(对于StackOverflow来说是全新的 - 嘿伙计们!),这段错误让我在过去的几个小时内没有悲伤(在Windows机器上使用DevC++).这只是一个简单的回文主要计划,但它确实让我很难过.我一般不是像这样的新手程序员,但是...好上帝.现在我记得为什么我要快速摆脱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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果这是一个愚蠢的问题,我提前道歉,答案是非常明显的 - 但我已经正式达到极限,无论答案多么合乎逻辑,我一直在编写同样的问题太长时间了.有道理.此外,段错误是可怕的野兽.提前感谢您提供的任何服务!
〜乔丹
这条线sprintf(strI, "%s%d", 10, myInt);很可能会崩溃.
strI,它被定义为char* strI = 0;Make it a char[64]或合适的大小.其他一些问题:
int isPrime(int myInt);之前的主某处().char *strrev(char str[]);和不是char *strrev()