我在char array
C
#define BUFSIZE 2048
unsigned char buf[BUFSIZE];
char request[10];
strcat(request "GET key01");
request[10] = '\0';
buf = request;
请求来自具有client-server socket
模拟的网络,但我没有在此处包含此内容以保持简单。
无论如何,我必须对buf
字符串进行标记,但也要保留未加密的副本。我试过这个:
char* buf_for_token = buf;
printf("What is the buf before tokenization? %s\n", buf);
const char s[2] = " ";
char *token;
token = strtok(buf_for_token, s);
token = strtok(NULL, s);
printf("What is the buf after tokenization? %s\n", buf);
我的输出是:
What is the buf before tokenization? GET key01
What is the buf after tokenization? GET
我想改为:
What is the buf before tokenization? GET key01
What is the buf after tokenization? GET key01
如何从char数组中获取字符串的值并保存我可以操作的副本而不影响原始值?
答案 0 :(得分:1)
您可以使用C <string.h>
功能:
strcpy(const char *dest, const char *src);
将从src复制到&#39; \ 0&#39; char,into dest,并包含&#39; \ 0&#39;炭。
或强>
使用:
strcat(const char *dest, const char *src);
将附加到已存在的字符串的末尾,从null终止&#39; \ 0&#39; dest,添加所有字符,直到并包括&#39; \ 0&#39;。
或强>
使用:
strncpy(const char *dest, const char *src, int size);
将char * src中的n个字符复制到char * dest。
答案 1 :(得分:1)
strtok
具有破坏性;它会通过用零字节覆盖分隔符来标记它来修改缓冲区的内容。如果你需要保留原始缓冲区内容,那么你需要复制到另一个缓冲区并标记第二个缓冲区,否则你需要使用strtok
以外的东西(这通常是正确的答案)。
查看strchr
或strpbrk
等功能。你需要弄清楚如何提取和保存单个令牌到另一个缓冲区,但这并不难。