我想知道为什么在确定c中字符串的长度时不将\n计算为2个字符#
前任:
这是测试注释\n示例文本测试123456
上面的字符串包含136个字符,但我存储字符串的string对象的length属性将其计数为1 chartactor,并将该字符串报告为124个字符长。
我想提取一个子串基于预先计算的开始和长度标记。标记是以两个字符计数创建的。
我怎么能在C语言中做如下的等价操作#

select SUBSTRING('This is a test comment\nSample text test 123456\nadssssssssss\n\nasdasdasda\nasdadadadad\nasadad\nasada\n\n\nLast paragraph\n12345\nTest',1,136);

我不能使用子字符串,因为我的长度偏移量136超出了字符串的c表示的边界。

最佳答案

String.Length不包括换行符:

string test = "1234\n6789\n\nC";

Console.WriteLine(test);
Console.WriteLine("Length: {0}", test.Length);

输出:
1234
6789

C
Length: 12

您可能缺少的是'\n'是一个字符。它表示换行符(LF)。字符串文本中的反斜杠表示它是Escape Sequence
因此,即使您计算了136个字符,\n在编译时也会替换为一个换行符。
注意,根据该字符串的使用位置,您可能需要考虑使用Environment.NewLine而不是\n。windows上真正的换行符是"\r\n"CR LF。虽然许多控件等都可以很好地处理\n,但文件和其他东西可能会\r\n
string test = "Welcome to" + Environment.NewLine + "StackOverflow!";

关于c# - 换行符不算为字符串长度的2个字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13484282/

10-17 02:08