在C字符串中可以使用哪些值?
我面临以下代码:在C字符串中可以使用哪些值?,c,C,我面临以下代码: char buf[100]; char buf2[100]; strcpy( buf, "áéíóúç" ); sprintf(buf2, "%s", buf); 我想知道这是否正确。我已经在Windows和Linux上测试过了,它确实可以工作,但是它能在所有不同语言的操作系统/平台上工作吗 strcpy和sprintf都需要以null字符结尾的C字符串,但C字符串的内容可以是任何内容(不包括null字符) 还可以执行以下操作吗: strcpy( buf, "\x0a\x09
char buf[100];
char buf2[100];
strcpy( buf, "áéíóúç" );
sprintf(buf2, "%s", buf);
我想知道这是否正确。我已经在Windows和Linux上测试过了,它确实可以工作,但是它能在所有不同语言的操作系统/平台上工作吗
strcpy
和sprintf
都需要以null
字符结尾的C字符串,但C字符串的内容可以是任何内容(不包括null
字符)
还可以执行以下操作吗:
strcpy( buf, "\x0a\x09\x08\x07\x06\x05\x04\x03\x02\x01\x00" );
sprintf(buf2, "%s", buf);
?这个问题已经存在,但是:
字符串函数仅在NULL字符处停止,因为c字符串的定义是以NULL结尾的字节缓冲区。因此,您的示例是正确的。字符数组只是一个字节数组,所有非宽字符串函数都基于该假设进行操作。通常唯一具有特殊含义的字节是空字节 据我记忆所及,C标准在字符编码(或一般的文本)方面没有太多的内容,因此在预期输出字符编码与代码不匹配的平台上,程序注定会失败。是的*
*)但是请注意,第二个示例将短一个字符,
\0
字符表示字符串的结尾,因此不会打印。char
是机器中最小的可寻址单元。在你今天使用的任何东西上,都是8位或1字节。您可以在其中放入由8位整数表示的任何内容
在处理字符集时,有些集合每个字符使用16位(字符集中的字符)。在这种情况下,如果您没有意识到这一点,并且您的缓冲区太小而无法容纳数据,则会出现问题
建议阅读:几乎总是,您的代码可以正常工作 然而,我看到了两个可能的小问题: