gpt4 book ai didi

c - fseek() 工作后的奇怪行为

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

我遇到了一个奇怪的行为。调试时,当 while 循环第一次循环时:在经过 /* "data-url"*//* "data-author"之后*/ 部分代码 我在 Debugging windows -> Watches 中得到下一个结果:

(我使用的是 Code::Blocks IDE,Ubuntu 13.04)

dataUrl_tempString的长度为8字节,dataAuthor_tempString 的长度是11 字节,dataName_tempString 的长度是9 字节...

1st pic

但是在通过 /* data-name */ 部分代码后,我得到了让我感到困惑的结果:

2nd pic

现在它们的大小不是 8、11 和 9 字节!

怎么了?

你能帮我找到这种行为的原因吗?


这是该函数的代码:

int SubString_Search(char *fnameNew, char *strUrl, char *strAuthor, char *strName) {

FILE *fp;
FILE *ofp_erase;
FILE *ofp;
char ch_buf;
int count = 0;

char dataUrl[8] = "";
char dataAuthor[11] = "";
char dataName[9] = "";
char *dataUrl_tempString = &dataUrl[0];
char *dataAuthor_tempString = &dataAuthor[0];
char *dataName_tempString = &dataName[0];


if( (fp = fopen("output_temp.txt", "r")) == NULL) {
printf("File could not be opened.\n");
return (-1);
}
else {
/* Erasing 'NEW' file if exists */
ofp_erase = fopen(fnameNew, "w");
fclose(ofp_erase);
}



ofp = fopen(fnameNew, "a");
rewind(fp);

while(!feof(fp)) {

/* "data-url" */
fread(dataUrl_tempString, 8, sizeof(char), fp);
if(memcmp(dataUrl_tempString, strUrl) == 0) {
fseek(fp, 2, SEEK_CUR); // going up to required place to copy a string
while( (ch_buf = getc(fp)) != '"') {
fputc(ch_buf, ofp);
}
fputc('\n', ofp);
}
fseek(fp, -8, SEEK_CUR);


/* "data-author" */
fread(dataAuthor_tempString, 11, sizeof(char), fp);
if(memcmp(dataAuthor_tempString, strAuthor) == 0) {
fseek(fp, 2, SEEK_CUR); // going up to required place to copy a string
while( (ch_buf = getc(fp)) != '"') {
fputc(ch_buf, ofp);
}
fputc(' ', ofp);
fputc('-', ofp);
fputc(' ', ofp);
}
fseek(fp, -11, SEEK_CUR);


/* "data-name" */
fread(dataName_tempString, 9, sizeof(char), fp);
if(memcmp(dataName_tempString, strName) == 0) {
fseek(fp, 2, SEEK_CUR); // going up to required place to copy a string
while( (ch_buf = getc(fp)) != '"') {
fputc(ch_buf, ofp);
}
//fputc() not needed
}
fseek(fp, -8, SEEK_CUR); // jumping over 1 symbol from the beginning: `-8` instead of `-9`...


count++;
if(count == 5)
break;
}

rewind(fp);
fclose(fp);
fclose(ofp);

return 0;
}

最佳答案

字符串需要为 '\0' 终止符分配空间 - 您只为具有 8 个字符的字符串分配了 8 个字节(因此最少需要 9 个字节)。根据内存中的后续内容,您将获得不可预知的结果。

关于c - fseek() 工作后的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18319539/

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