我是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
函数无效,除非已在已经使用过的字符串上使用空终止。