C\C++字符串操作

拼接

复制

memcpy 与 strcpy \ strcpy_s \ strncpy \ strncpy_s

void *memcpy(void *s1, const void *s2, size_t n) :内存拷贝

要点记录:

  1. 一定要拷贝n个字符。
  2. 重叠问题?
  3. 对于包含“\0”的字符串只能用memcpy。
  4. memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

char *strcpy(char *s2, const char *s1);:字符串复制

要点记录:

  1. strcpy 依据 “\0” 作为结束判断。
  2. 如果 s2 的空间不够,则会引起 buffer overflow。 =》 建议使用strncpy()
  3. strcpy只能复制字符串。

char *strncpy(char *s2, const char *s1, size_t n);

  1. 当n>strlen(s1)时,给s2不够数的空间里填充“\0”;当n<=strlen(s1)时,s2是没有结束符“\0”的。 =》使用strncpy时,确保s2的最后一个字符是“\0”。
  2. s2指向的内存一定会被写n个字符。

strcpy、strncpy与memcpy的区别与使用方法

输出

分割

strtok()

char *__cdecl strtok(char *_String, const char *_Delimiter)

warning:会修改源字符串。

  • 在函数strtok()内部使用了一个静态变量SAVE_PTR指针,用以记录分割一次之后_String中下一个字符串的位置。
  • 如果_String为空,则函数内部保存的SAVE_PTR指针将作为起始位置。

=》

  1. strtok()函数是线程不安全的(因为其函数内部使用到了静态存储区)
  2. 函数strtok()实际上修改了s指向的字符串。s最终指向第一个子串。

首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL
strtok在s中查找包含delim的字符并用NULL(’\0’)来替换,直到找遍整个字符串
返回指向下一个标记串。当没有标记串时则返回空字符NULL。

int main()
{
    char *p;
    char str[100]="This is a test ,and you can use it";
    p = strtok(str," ");  // 此时p指向字符串:"This"(第一个分割子串)。即每次找到一个分隔符后,一个NULL就被放到分隔符处,此时NULL指针指向后面的字符串:"is a test ,and you can use it"。
    
    // 继续获取其他的子字符串
    while(p != NULL)
    {
        p = strtok(NULL, ",");  // NULL 即为上面返回的指针,即字符串: "is a test ,and you can use it"。
    }
    return 0;
} 

C 语言字符串分割函数 p = strtok(NULL, " ");

C/C++——字符串分割(strtok, strtok_s)

strtok_s()

char *__cdecl strtok_s(char *_String, const char *_Delimiter, char **_Context)

strtok_s()函数增加了一个参数_Context,这个参数就是相当于strtok()函数中内部定义的静态SAVE_PTR指针,用来传递对字符串_String的处理进行到了哪里。

相较于strtok()函数,strtok_s函数需要用户传入一个指针,用于函数内部判断从哪里开始处理字符串(自动更新)。

转换

atoi()

把参数 str 所指向的字符串转换为一个整数(类型为 int 型)。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值