Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从C中的字符数组中获取字符串值_C_Arrays_Memory_Char_Copy - Fatal编程技术网

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

如何从C中的字符数组中获取字符串值,c,arrays,memory,char,copy,C,Arrays,Memory,Char,Copy,我在C #define BUFSIZE 2048 unsigned char buf[BUFSIZE]; char request[10]; strcat(request "GET key01"); request[10] = '\0'; buf = request; 请求来自一个网络,带有客户机-服务器套接字模拟,但为了保持简单,我没有在这里包含它 无论如何,我必须标记buf字符串,但还要保留一个未标记的副本。我试过这个: char* buf_for_token = buf; print

我在
C

#define BUFSIZE 2048
unsigned char buf[BUFSIZE];

char request[10];
strcat(request "GET key01");
request[10] = '\0';

buf = request;
请求来自一个网络,带有
客户机-服务器套接字模拟,但为了保持简单,我没有在这里包含它

无论如何,我必须标记
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
如何从字符数组中获取字符串的值并保存一个副本,以便在不影响原始值的情况下进行操作?

您可以使用C
函数:

strcpy(const char *dest, const char *src); 
它将从src复制到'\0'字符,并包含'\0'字符

使用:

它将附加到已存在字符串的末尾,从dest的null终止“\0”开始,添加所有字符,直到并包括“\0”

使用:


它将n个字符从char*src复制到char*dest。

strtok
是破坏性的;当您通过用零字节覆盖分隔符来标记缓冲区时,它将修改缓冲区的内容。如果需要保留原始缓冲区内容,则需要复制到另一个缓冲区并将第二个缓冲区标记化,或者需要使用除strtok
之外的内容(这通常是正确的答案)


查看类似于
strchr
strpbrk
的函数。您需要弄清楚如何提取单个令牌并将其保存到另一个缓冲区,但这并不难。

什么是
strcat(请求“GET key01”)应该怎么做?它甚至不是有效的语法。你的意思是
strcpy(请求“获取key01”)?简单的答案是使用strcpy创建缓冲区的副本,并将副本标记化。token=strtok(buf_表示令牌,s);printf(“标记化后的buf是什么?%s\n”,buf);令牌=strtok(空,s)<代码>strcat(请求“获取密钥01”)将字符串连接到未初始化的内存。@Barmar:我假设他只是输入了一个错误,没有输入逗号。
strcat(const char *dest, const char *src);
strncpy(const char *dest, const char *src, int size);