御笔剑客 发表于 2018-3-22 11:59:35

关于字符数组的问题

#include <stdio.h>

int main(void)
{
        char ch = "123123\01231232";
        printf("%s\n", ch);
}
这样插入\0会有什么问题呢?如何正确在一段字符串中插入一个\0呢?

BngThea 发表于 2018-3-22 12:10:17

会被截断
这样就可以了\\0

徒梦 发表于 2018-3-22 12:10:50

我用的vs2015,这样写的话会被当成转义字符 \012 也就是换页符

人造人 发表于 2018-3-22 14:46:42

#include <stdio.h>

int main(void)
{
        char ch = "123123\\01231232";
        printf("%s\n", ch);
}


123123\01231232
请按任意键继续. . .

御笔剑客 发表于 2018-3-22 16:09:11

BngThea 发表于 2018-3-22 12:10
会被截断
这样就可以了\\0

不是,我的意思是让\0吧1231231231232截断输出,只输出前部分的123123{:10_266:}

风扫地 发表于 2018-3-22 16:10:44

本帖最后由 风扫地 于 2018-3-22 16:32 编辑

问题1.
char ch = "123123\01231232";
不知道是什么意思,建议如果不知道什么意思,就尽量不要再代码中这么写。。
否认三连:看不懂,不知道意思,不这么写


问题2.
在字符串中直接插入 \0 可以使用
直接访问数组元素进行改写
char ch = "123123x1231232";
ch = '\0'; //额外写这么一句话



扩展3.
如果是
char *ch = "123123x1231232";
ch = 0; //这样可能就不行了,"123123x1231232"被放在了静态区,只能读不能写。。


BngThea 发表于 2018-3-22 16:13:26

御笔剑客 发表于 2018-3-22 16:09
不是,我的意思是让\0吧1231231231232截断输出,只输出前部分的123123

我回答你的提问了,你这样做是会只输出前面的部分,被截断了

御笔剑客 发表于 2018-3-22 16:24:22

BngThea 发表于 2018-3-22 16:13
我回答你的提问了,你这样做是会只输出前面的部分,被截断了

我这里不是输出前面123123,而是
123123
31232
\0变成了\012变成了换行符

BngThea 发表于 2018-3-22 16:27:56

御笔剑客 发表于 2018-3-22 16:24
我这里不是输出前面123123,而是
123123
31232


你的本意是要截断?
那就在0后面加个空格好了

风扫地 发表于 2018-3-22 16:54:04

本帖最后由 风扫地 于 2018-3-22 17:02 编辑

问题1:
把元素打印出来发现是
0x0a

是把 012当成八进制数转义了,所以打印出来是换行。

为什么只转三位了,后面的3为啥不拿来转义了? -------->不知道http://tieba.baidu.com/p/3194436273   有人回答了,要死磕请阅读。。


截断字符串就是在截断位置的数组元素直接赋值0即可。
别纠结,别直接在字符串赋值的时候这样给,转义规定太麻烦了,而且可读性太差,谁在代码里面埋这么个雷,我可能会打死他~。~

没其他问题就结题吧。{:5_110:}

人造人 发表于 2018-3-22 17:20:11

御笔剑客 发表于 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]
查看完整版本: 关于字符数组的问题