这是我的代码
char* a[10];
a[0]="'example'";
char* p;
p=strstr(a[0],"'");
我知道如果 strstr 可以找到 '
,它会返回一个指向第一个字符的指针,即 '
。我想取两个 '
之间的值并将其保存在 a[1]
中。我该怎么做?
因此
a[1]
是 “example”
。
最佳答案
strchr()
strstr()
似乎是更合适的选择。
使用第一个 strchr()
的结果,+ 1
,作为后续 strchr()
的参数,然后是 malloc()
和 strcpy()
或 sprintf()
到 a[1]
:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char* a[10];
char* p;
a[0] = "'example'";
p = strchr(a[0], '\'');
if (p)
{
char* q = strchr(++p, '\'');
if (q)
{
a[1] = malloc((q - p) + 1);
if (a[1])
{
sprintf(a[1], "%.*s", q - p, p);
printf("[%s]\n", a[1]);
}
}
}
return 0;
}
将指向字符串文字的指针和 malloc()
数据存储到同一个数组中似乎是一件危险的事情。您必须free()
动态分配内存,但仅 动态分配内存。代码需要知道 a
中的哪些元素指向动态分配的内存,并且必须是 free()
d,而那些不是。
将 a
初始化为所有 NULL
,因此知道填充了哪些元素:
char* a[10] = { NULL };
并且在 NULL
指针上调用 free()
是安全的(什么都不做)。
关于c - c中的字符串处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836475/