gpt4 book ai didi

c - 段错误,scanf

转载 作者:太空宇宙 更新时间:2023-11-04 00:44:25 25 4
gpt4 key购买 nike

我们有一个任务是从一个文件中获取字符,将它向右移动一个给定的值(这在代码中有意义)然后将该新值存储在一个新文件中,但我似乎是遇到段错误,据我所知,这意味着我正在尝试访问已分配内存之外的内存?我是 C 的新手,直到现在我都设法调试了这段代码,老实说,我不知道该去哪里。我什至不太明白问题出在哪里。

#include<stdio.h>
//Get Shift amount
//Get ifilename
//Get ofilename
//open them
//Get characters one at a time from input
//Process and shift by shift amount
int main()
{
int i;//loop value
char a[62]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//Variable with every value
int sa = 0;//Store Shift value
char ofile[30];//contain the name of output file
char ifile[30];//contain name of input file
char value;//Value to keep the current value in

printf("How far in ascii values would you like to shift?\n");
scanf("%i", sa);//Get shift
printf("What is the name of your input file located in this directory?");
scanf("%s", ifile);//get input name
printf("What would you like to name your new file?\n Do note that it will overwrite the current file named this!");
scanf("%s", ofile);//Get output name

FILE *oIfile = fopen(ifile, "r"), *oOfile = fopen(ofile, "w");

while(value = fscanf(oIfile, "%c", value) != EOF)//Check to ensure that you never reach the end of the file
{
for(i=0; i<62; i++)//loop through the list of all characters
{
if(value == a[i])//check to see if the value from the input file matches with which letter
{
value = a[i+sa] % 62;//incrase the value by the shift amount, check if its longer than 62, add remainder
break;//break the for loop so we can restart the while loop with the next letter
}
}
fprintf(oOfile, "%c");//print the new value to the output file
}
fclose(oIfile);//close input file
fclose(oOfile);//close output file
}

这个问题是因为我对 scanf 的处理方式吗?

最佳答案

除了将地址传递给 scanf (scanf("%i",&sa) 你必须这样做(另外检查返回值也是正确的它的值(value))-你需要纠正一些事情:-

  • 应该是 (value = fscanf(oIfile, "%c", value)) != EOF!= 的优先级高于 =,因此这是获得正确结果所必需的。

  • a[(i+sa)%62]=... 也是正确的做事方式。因为否则它将访问超出范围的数组索引以获取 sa 的某些值,从而导致未定义的行为。

  • fprintf(stream,"%c",charvariable) 这将是 fprintf 的用途。

  • valuefscanf 返回的值覆盖。您应该使用其他临时变量,或者更好的做法是像这样 while(fscanf(oIfile, "%c", value)!=EOF)。但是要进行更多检查,您需要做一些类似

      int c;
    while((c=fscanf(oIfile, "%c", value))!=EOF)

您在此处传递 sa 的值而不是其在 scanf 中的地址,从而导致段错误。

关于c - 段错误,scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48816082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com