我是C语言的新手,正在复习一些源代码。但是我不确定此代码片段正在发生什么。

我真的不认为它在做什么,因为在调试中,tempstr的输出似乎是相同的。

这就是我的想法,如果我错了,那就纠正。
*(tempstr + strlen(line))将行的长度添加到tempstr中,并取消引用并将分配的0x0转换为char?

char line[128], tempstr[128]

strcpy(line, "AUTO_ANSWER_CALL = 1");
strcpy(tempstr,line);
*(tempstr + strlen(line)) = (char) 0x0; // Confusing part

最佳答案

这是一个指针值:

tempstr

这是另一个指针值(指向5指针值之外的tempstr元素):
tempstr + 5

这是一个整数:
strlen(line)

因此,这是一个指针值(它指向strlen(line)指针值之外的tempstr元素):
tempstr + strlen(line)

这是取消引用该指针:
*(tempstr + strlen(line))


这就是我的想法,如果我错了,那就纠正。 *(tempstr + strlen(line))将行的长度添加到tempstr中,并取消引用并将分配的0x0转换为char?

确保在tempstr的索引20处的字符(紧随“AUTO_ANSWER_CALL = 1”个字符之后)为空:即,确保字符串以空值终止。

顺便说一句,该字符串已经是以空值终止的(这样最后一条语句就变得多余了):因为strcpy复制了包含隐式空值终止字符的字符串。


仅执行以下tempstr [sizeof(tempstr)-1] ='\ 0'并不容易;这更容易理解。

这些不是同一件事:strlen(line)等于20,但是sizeof(tempstr)等于128。


会工作吗:tempstr [strlen(tempstr)] ='\ 0'

这与以下内容完全相同:
*(tempstr + strlen(tempstr)) = '\0'

只是一种不同的编写方式。

但是,如果tempstr不是以null终止的字符串,则长度也将为128。

如果tempstr不是以null结尾的字符串,则strlen(tempstr)是未定义的(“undefined”表示它毫无意义且危险,错误,因此不应该使用):strlen函数无效,除非已在已经使用过的字符串上使用空终止。

10-04 12:58