c - 解析字符串并将其存储为 char 数组时显示随机字节
问题描述
我正在尝试解析一个类似的字符串HTTP POST /abc/def/ghi/klm/mno
,我想在其中分隔不同的组件,即协议、HTTP 动词和路径。
我正在使用strtok
函数,然后使用函数复制字符串strlen
。但是当我尝试打印字符串时,它会给出一些随机字节,如下所示。
我无法理解这其中的原因。这就是我正在做的事情。
struct my_con {
char protocol[100];
char method[100];
char uri[100];
};
char* header = "HTTP POST /abc/def/ghi/klm/mno";
void my_func(my_con **mc) {
char* p = strtok(header," ");
int c = 0;
while(p != NULL) {
if(count == 0) strncpy((**mc).protocol, p, strlen(p));
elseif(count == 1) strncpy((**mc).method, p, strlen(p));
elseif(count == 2) strncpy((**mc).uri, p, strlen(p));
count++;
p = strtok(NULL, " ");
}
}
解决方案
strspn
并可strcspn
用于遍历文字字符串。
#include <stdio.h>
#include <string.h>
int main ( void) {
char* header = "HTTP POST /abc/def/ghi/klm/mno";
char temp[100];
int offset = 0;
int span = 0;
while ( header[offset]) {
span = strspn ( header + offset, " ");//count spaces
offset += span;//advance offset past spaces
span = strcspn ( header + offset, " ");//count non-space
if (span && span < 99) {
strncpy ( temp, header + offset, span);
temp[span] = 0;//terminate
printf ( "%s\n", temp);
}
offset += span;//advance offset past non-space
}
return 0;
}
推荐阅读
- django - 在模型文件中覆盖 get_queryset 而不必在 django 中创建新的模型管理器?
- python - 表单提交后重定向到下一个帖子
- javascript - 节点后端无法通过 cookieParser 从前端读取 cookie
- android - 如何从 Activity 更新 DialogFragment 的 UI
- flutter - 如何将 SharedPreferences 与 api 表单数据一起使用并保持用户登录?
- docker - 如何在运行 docker-compose 时修复“权限被拒绝”错误
- react-native - React Native IOS 发布
- gitlab - Gitlab 获取用户名失败:内部 API 无法访问
- latex - pandoc beamer 文本溢出
- iframe - Vaadin iFrame 不显示外部内容