鱼C论坛

 找回密码
 立即注册
查看: 1913|回复: 10

[已解决]关于字符数组的问题

[复制链接]
发表于 2018-3-22 11:59:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

int main(void)
{
        char ch[20] = "123123\01231232";
        printf("%s\n", ch);
}
这样插入\0会有什么问题呢?如何正确在一段字符串中插入一个\0呢?
最佳答案
2018-3-22 16:54:04
本帖最后由 风扫地 于 2018-3-22 17:02 编辑

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

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

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


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

没其他问题就结题吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-22 12:10:17 | 显示全部楼层
会被截断
这样就可以了\\0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 12:10:50 | 显示全部楼层
我用的vs2015,这样写的话会被当成转义字符 \012 也就是换页符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 14:46:42 | 显示全部楼层
#include <stdio.h>

int main(void)
{
        char ch[20] = "123123\\01231232";
        printf("%s\n", ch);
}
123123\01231232
请按任意键继续. . .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-22 16:09:11 | 显示全部楼层
BngThea 发表于 2018-3-22 12:10
会被截断
这样就可以了\\0

不是,我的意思是让\0吧1231231231232截断输出,只输出前部分的123123
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 16:10:44 | 显示全部楼层
本帖最后由 风扫地 于 2018-3-22 16:32 编辑

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


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



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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我回答你的提问了,你这样做是会只输出前面的部分,被截断了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我这里不是输出前面123123,而是
123123
31232
\0变成了\012变成了换行符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 16:27:56 | 显示全部楼层
御笔剑客 发表于 2018-3-22 16:24
我这里不是输出前面123123,而是
123123
31232

你的本意是要截断?
那就在0后面加个空格好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-22 16:54:04 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风扫地 于 2018-3-22 17:02 编辑

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

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

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


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

没其他问题就结题吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[20] = "12312381231232";
        ch[6] = '\0';

        printf("%s\n", ch);

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-6 09:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表