Hyd*_*erA 36 c c++ string variables
首先,我想说我是C/C++的新手,我原本是一名PHP开发人员,因此我习惯于以任何我喜欢的方式滥用变量.
C是一个严格的国家,编译器在这里不太喜欢我,我习惯于违反规则来完成任务.
无论如何,这是我简单的代码:
char IP[15] = "192.168.2.1";
char separator[2] = "||";
puts( separator );
Run Code Online (Sandbox Code Playgroud)
输出:
||192.168.2.1
Run Code Online (Sandbox Code Playgroud)
但是,如果我将定义更改separator为:
char separator[3] = "||";
Run Code Online (Sandbox Code Playgroud)
我得到了所需的输出:
||
Run Code Online (Sandbox Code Playgroud)
那么为什么我需要给男人额外的空间,所以他不和他面前的男人睡觉?
sha*_*oth 45
那是因为当separator长度被强制为2 时,你得到一个非空终止的字符串.
永远记住为null终止符分配一个额外的字符.对于一串长度,N你需要N+1字符.
一旦违反此要求,任何期望以null结尾的字符串(puts()包括函数)的代码都将遇到未定义的行为.
你最好的选择是不强迫任何特定的长度:
char separator[] = "||";
Run Code Online (Sandbox Code Playgroud)
将分配一个完全正确大小的数组.
NPE*_*NPE 22
C中的字符串是NUL终止的.这意味着两个字符的字符串需要三个字节(两个用于字符,第三个用于表示字符串结尾的零字节).
在您的示例中,可以省略数组的大小,编译器将分配正确的存储量:
char IP[] = "192.168.2.1";
char separator[] = "||";
Run Code Online (Sandbox Code Playgroud)
最后,如果您使用C++而不是C编码,那么最好使用std::string.