gpt4 book ai didi

c - 从文件中的单词中删除字母 C - 有问题的符号

转载 作者:行者123 更新时间:2023-11-30 17:59:45 27 4
gpt4 key购买 nike

准确地说,我正在尝试从文件 A 复制到文件 B,每个不包含字母“e”和“t”的单词(the、peter 等),程序运行正常,但在输出文件的末尾我得到了一个奇怪的标志。

Input: What says Lucentio to this shame of ours?
Output: What says to this shame of ours?˙

(你能看到字符˙吗?)

我不想要它,我不知道那是什么,但它不是 EOF,我试图阻止它复制,但它不起作用。我在这里需要一些帮助。

代码:

char signHold[1];

int main(int *argc, char** argv)
{
FILE* infile;
FILE* outfile;

char* string = NULL;
if(argc != 3)
{
printf(stderr,"Error: Improper number of arguments");
return EXIT_FAILURE;
}
remove(argv[2]);
infile = fopen(argv[1],"r");
while(feof(infile) == 0)
{
string = getWord(infile);
if(checkDenied(string))
addToFile(outfile, argv[2], string);

addToFile(outfile, argv[2], signHold);
}
fclose(infile);
free(string);
return EXIT_SUCCESS;
}

char* getWord(FILE* ptr)
{
char* tempString;
size_t memSize = 0;
int c;

tempString = expandRealloc(NULL,sizeof(char));
while(c = fgetc(ptr))
{
if(isalpha(c) != 0)
{
tempString = expandRealloc(tempString, (memSize+1)*sizeof(char)+1);
tempString[memSize] = c;
memSize++;
}
else
{
signHold[0] = c;
break;
}
}
tempString[memSize] = '\0';
return tempString;
}

short int checkDenied(const char* str)
{
int i;

i = strspn("e", str);

if(i >= 1)
{
i = strspn("t", str);
if(i >= 1)
{
return EXIT_SUCCESS;
}
}
return EXIT_FAILURE;
}

short int addToFile(FILE* ptr, char* directory, char* text)
{
ptr = fopen(directory,"a+");
fprintf(ptr,"%s", text);
fclose(ptr);
return EXIT_SUCCESS;
}

最佳答案

首先,您假设 fgetc 在文件末尾返回 0,但事实并非如此。它返回EOF。也许您正在读取 EOF,并将其分配给一个字符,即 signHold[0] (这可能会导致任何结果,因为 EOF 不会) t 适合 char)

然后,您继续打印 signHold,其中包含一个随机字符,后跟 谁知道什么,因为该字符串不是以 NUL 结尾(其大小为 1,其第一个字符不是“\0”。也就是说,您正在打印 signHold 之后可能发生的任何内容。(顺便说一句,这也是未定义的行为)。

关于c - 从文件中的单词中删除字母 C - 有问题的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11178775/

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