如何从C中的char数组中获取字符串值

时间:2015-04-13 23:42:21

标签: c arrays memory char copy

我在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数组中获取字符串的值并保存我可以操作的副本而不影响原始值?

2 个答案:

答案 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以外的东西(这通常是正确的答案)。

查看strchrstrpbrk等功能。你需要弄清楚如何提取和保存单个令牌到另一个缓冲区,但这并不难。