gpt4 book ai didi

c - 为字符数组的strlen分配空间时为什么要加1?

转载 作者:行者123 更新时间:2023-11-30 18:20:18 24 4
gpt4 key购买 nike

我目前正在开发一个程序,其中涉及创建考试模板。在我允许用户向考试添加问题的功能中,我需要确保仅使用存储数据所需的内存。经过对各种输入函数(getc、scanf 等)之间的差异进行大量研究后,我成功地做到了这一点,并且我的程序似乎正在运行,但我担心一件事。这是我的函数的代码,我在相关行上添加了注释:

int AddQuestion(){

Question* newQ = NULL;
char tempQuestion[500];
char* newQuestion;

if(exam.phead == NULL){
exam.phead = (Question*)malloc(sizeof(Question));
}
else{
newQ = (Question*)malloc(sizeof(Question));
newQ->pNext = exam.phead;
exam.phead = newQ;
}

while(getchar() != '\n');

puts("Add a new question.\n"
"Please enter the question text below:");
fgets(tempQuestion, 500, stdin);

newQuestion = (char*)malloc(strlen(tempQuestion) + 1); /*Here is where I get confused*/
strcpy(newQuestion, tempQuestion);

fputs(newQuestion, stdout);
puts("Done!");

return 0;
}

令我困惑的是,我尝试运行相同的代码,但进行了一些小的更改,以准确测试幕后发生的情况。我尝试从我的 malloc 中删除 + 1,我把它放在那里,因为 strlen 只计数但不包括终止字符,并且我假设我希望包含终止字符。那仍然运行顺利。因此,我尝试运行它,但使用 - 1 代替,因为这样做会删除终止字符之前的所有内容(换行符,对吗?)。尽管如此,它还是将所有内容显示在单独的行上。所以现在我有点困惑并怀疑我对字符数组如何工作的了解。有人可以帮助澄清这里发生的事情,或者为我提供一个资源来更详细地解释这一切吗?

最佳答案

在 C 中,字符串通常以 null 结尾。但是,Strlen 只计算 null 之前的字符。因此,您始终必须为 strlen 的值加一以获得足够的空间。或者调用strdup

关于c - 为字符数组的strlen分配空间时为什么要加1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25706337/

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