关于字符数组的问题
#include <stdio.h>int main(void)
{
char ch = "123123\01231232";
printf("%s\n", ch);
}
这样插入\0会有什么问题呢?如何正确在一段字符串中插入一个\0呢? 会被截断
这样就可以了\\0 我用的vs2015,这样写的话会被当成转义字符 \012 也就是换页符 #include <stdio.h>
int main(void)
{
char ch = "123123\\01231232";
printf("%s\n", ch);
}
123123\01231232
请按任意键继续. . . BngThea 发表于 2018-3-22 12:10
会被截断
这样就可以了\\0
不是,我的意思是让\0吧1231231231232截断输出,只输出前部分的123123{:10_266:} 本帖最后由 风扫地 于 2018-3-22 16:32 编辑
问题1.
char ch = "123123\01231232";
不知道是什么意思,建议如果不知道什么意思,就尽量不要再代码中这么写。。
否认三连:看不懂,不知道意思,不这么写
问题2.
在字符串中直接插入 \0 可以使用
直接访问数组元素进行改写
char ch = "123123x1231232";
ch = '\0'; //额外写这么一句话
扩展3.
如果是
char *ch = "123123x1231232";
ch = 0; //这样可能就不行了,"123123x1231232"被放在了静态区,只能读不能写。。
御笔剑客 发表于 2018-3-22 16:09
不是,我的意思是让\0吧1231231231232截断输出,只输出前部分的123123
我回答你的提问了,你这样做是会只输出前面的部分,被截断了
BngThea 发表于 2018-3-22 16:13
我回答你的提问了,你这样做是会只输出前面的部分,被截断了
我这里不是输出前面123123,而是
123123
31232
\0变成了\012变成了换行符 御笔剑客 发表于 2018-3-22 16:24
我这里不是输出前面123123,而是
123123
31232
你的本意是要截断?
那就在0后面加个空格好了 本帖最后由 风扫地 于 2018-3-22 17:02 编辑
问题1:
把元素打印出来发现是
0x0a
是把 012当成八进制数转义了,所以打印出来是换行。
为什么只转三位了,后面的3为啥不拿来转义了? -------->不知道http://tieba.baidu.com/p/3194436273 有人回答了,要死磕请阅读。。
截断字符串就是在截断位置的数组元素直接赋值0即可。
别纠结,别直接在字符串赋值的时候这样给,转义规定太麻烦了,而且可读性太差,谁在代码里面埋这么个雷,我可能会打死他~。~
没其他问题就结题吧。{:5_110:} 御笔剑客 发表于 2018-3-22 16:24
我这里不是输出前面123123,而是
123123
31232
"123123\01231232"
\0 的后面能不能多加一个字符?加一个不是 0, 1, 2, 3, 4, 5, 6, 7的字符
\0 开始的字符会被当成八进制,所以后面的字符不能是 0~7
如果不能在 \0 后面多加一个字符那就只能
#include <stdio.h>
int main(void)
{
char ch = "12312381231232";
ch = '\0';
printf("%s\n", ch);
return 0;
}
页:
[1]