gpt4 book ai didi

c - 意外的访问冲突读取(尾部)

转载 作者:行者123 更新时间:2023-11-30 19:10:23 27 4
gpt4 key购买 nike

这是我的尾部代码(前 10 行):

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

typedef char storage_datatype;

#define MAXLINESIZE 1000
#define STORAGESIZE 10000
#define MAXLINES 100

int mgetline(char*, int);
char* alloc(int n);
void cp(char*, char*);

char *lines[MAXLINES];

storage_datatype storage[STORAGESIZE];
storage_datatype *storagep = storage;

int main(int argc, char **argv) {
int space, i;
space = i = 0;
char line[MAXLINESIZE];
char* p;
while ((space = mgetline(line, MAXLINESIZE)) > 0) {
p = alloc(space);
cp(p, line);
lines[i++] = p;
}
i = 0;
while (i < 10) {
if (*lines[i]) {
printf("%s", lines[i++]);
}
}
getchar();
return 0;
}

int mgetline(char *s, int lim)
{
int c;
char *t = s;

while (--lim > 0 && (c = getchar()) != EOF && c != '\n')
*s++ = c;
if (c == '\n')
*s++ = c;

*s = '\0';

return s - t;
}

char* alloc(int n) {
if (storage + STORAGESIZE - storagep >= n) {
storagep += n;
return storagep - n;
}
else
return 0;
}

void cp(char *s, char *t) {
while ((*s++ = *t++));
}

我收到此错误:

Access violation reading location 0x0000000000000000.

在这一行:

if (*lines[i]) {

我不明白为什么。我希望有人能给我解释一下。

最佳答案

while (space = mgetline(line, MAXLINESIZE) > 0)...

执行比较:

mgetline(line, MAXLINESIZE) > 0

并将结果(1 - true 或 0 - false)存储在 space 中。

mgetline的结果存储到space,然后检查该值是否大于0:

while ((space = mgetline(line, MAXLINESIZE)) > 0)...

关于c - 意外的访问冲突读取(尾部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401063/

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