使用c函数库的两个函数strtok, strncpy遇到的问题记录
1. strtok
问题背景: 解析形如 “1,2,3,4,5”字符串到整数数组
(1)计算个数
char* delim = ",";
int count = 0;
int *numbers = NULL;
char* str = "1,2,3,4,5";
char* token = strtok(str,delim);
while(token){
count++;
token = strtok(NULL, delim);
}
(2)申请内存,记录数字
numbers = (int*)malloc(sizeof(int)*count);
token = strtok(str, delim);
int index = 0;
while(token){
numbers[index++] = atoi(token);
token = strtok(NULL, delim);
}
问题记录:strtok()函数修改了str字符串本身,所有逗号被改成了‘\0’。因此(2)里面再用strtok操作str字符串将出现问题
2. strncpy
问题背景: 字符串拷贝
struct A{
char ifname[16];
char a;
char b;
}
char c[32] = {0};
strncpy(c, "abcdef", 32-1);
strncpy(A.ifname, c, 32-1);
问题记录:第二个拷贝会修改 A.a 的值,改成空字符, 因为strncpy当遇到空字符拷贝结束时,若拷贝个数未达到第三个参数count,则使剩余的为空字符,直到count个数。
注:strncpy(dest, src, count),count的长度不要超过dest所能容纳的最大字符数,若为字符串,最大应为count-1更保险。
最新文章
- Swift微博编写感
- cocos2d-x 运行时xcode提示错误:";vtable for XXX";, referenced from 问题已解决;
- Mysql数据库之Binlog日志使用总结
- zookeeper系列之通信模型(转)
- Emmet语法大全手册
- WCF 入门(19)
- codevs 1378选课 树形DP
- PHP数据访问
- Unicode和多字节字符集 (MBCS) 杂谈
- 使用Twisted进行socket编程
- CAS协议 - CAS URIs
- C#调用C++的DLL 数据类型转换
- C++学习笔录2
- MAC环境下生成Apple证书教程
- 杨氏矩阵查找元素位置Java实现
- HTML <;button>;标签
- PAT乙1001
- 201521123100 《Java程序设计》第6周学习总结
- VS2017的MVC和Angular联合开发的配置文件作用
- 翻译下 golang package time
热门文章
- 浅谈DPCHookSSDT和RemoveDPC
- (3)一般处理程序 ,HttpContext类
- fastscript增加三方控件
- SharePreferences使用
- java高级编程-使用反射强制给private字段赋值
- from: 关于RabbitMQ
- [Guava源代码阅读笔记]-Basic Utilities篇-1
- IntelliJ IDEA 10.5.1 引用外部Jar包
- C++11 并发指南系列(转)
- iOS学习笔记12-网络(一)NSURLConnection