C之字符串问题

1.sprintf,strcpy,strncpy

做作业的时候发现对这三个函数的理解有点混乱,整理一下三个复制字符串函数的区别

1.

sprintf(s1,”%s”,s2)————将s2字符串输入到s1,包括’\0’,同理如果没有遇到”\0″,会一直复制到下一个字符串,这一点类似于strcpy

2.

strcpy(s1,s2)——————-将s2复制到s1,包括’\0’。

这两种复制都存在一种问题就是如果s2字符串没有以’\0’结尾就会错误的一直往下复制

3.

strncpy(s1,s2,n)————–复制s2的前s个字符,

这里我发现存在一种可能会导致错误的用法,strncpy(s1,s2,strlen(s2)),strlen并没有将’\0’计算进去,因此这个复制不会复制’\0’,因此假设

s1=”abc”,s2=”12″,strncpy(s1,s2,strlen(s2))————s1=”12c”—-s1保留原来的字符

总结的来说strcpy会复制到\0,strncpy会忠心耿耿的复制完n个字符,空的补\0,sprintf多用在格式化输入。

2.char *,char []

char  * s1="abc";
char s2[4]="abc";
char *s3=malloc(sizeof(char)*4);

s1创建在常量区无法修改,s2创建在在栈区为一个字符数组,s3创建在堆区

3.操作文件时不要使用str

我们str系列的操作都是以\0作为结尾,然而当我们在操作文件传输信息时,这些信息有一些是含有\0的但这并意味着他的结束,特别是二进制文件。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇