【发布时间】:2016-01-01 09:48:15
【问题描述】:
在C 中,编译器有一个指向字符串开头的指针和一个结束符号('\0')。如果用户想要计算字符串的长度,编译器必须对字符串数组的元素进行计数,直到找到'\0'。
在UCSD-strings中,编译器在第一个符号中有字符串的长度。
编译器对C#-strings 有什么看法?是的,从用户的角度来看String 是一个object,它有一个字段Length,我不是在谈论高级别的东西。我想知道深度算法;例如,编译器如何计算字符串的长度?
【问题讨论】:
-
你的 C 假设是错误的。 C 编译器确切地知道每个字符串有多长。要看到这一点,请在字符串上调用
sizeof(而不是在指向字符串的指针上!)。 -
通常情况下,我会将其作为骗子关闭,但重复项很糟糕。 codeproject.com/Articles/3377/Strings-UNDOCUMENTED
-
@MSalters:我认为 homk 是指长度(C 中的
strlen)函数的实现,而不是编译器。 -
您混淆了编译器看到的内容和执行时发生的情况。编译器处理字符串的方式可能与
strlen等函数处理字符串的方式没有相似之处,编译时和运行时的表示可能完全不同。 -
"在 С 中,编译器有一个指向字符串开头的指针和一个结束符号 ('\0')"。不。在 C 中,编译器有一个开始引号和一个结束引号。它将以
sizeof结果的形式提供介于两者之间的字符数,无论它们是什么,包括嵌入的空值。strlen()与它无关,指针也无关。编译器还将在编译后的字符串中放置一个尾随空值。它不在源文本中。
标签: c# .net string memory compiler-construction