这是我的代码
char* a[10];
a[0]="'example'";
char* p;
p=strstr(a[0],"'");
我知道 strstr 是否可以找到'
它返回一个指向第一个字符的指针,即'
. 我想取两者之间的值'
并将其保存在a[1]
. 我该怎么做?结果
a[1]
是"example"
。
strchr()
似乎是一个更合适的选择strstr()
。
使用 first strchr()
, + 1
, 的结果作为后续strchr()
and thenmalloc()
和strcpy()
or sprintf()
into的参数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
s,这样就知道填充了哪些元素:
char* a[10] = { NULL };
并且调用指针是安全free()
的NULL
(什么都不做)。
只需找到下一次出现'
并复制子字符串:
char* a[10];
a[0]="'example'";
char* p, *q;
p=strstr(a[0],"'");
if (p) {
q = strstr(p+1, "'");
if (q) {
size_t len = (size_t)(q - p);
char *sub = malloc(len + 2);
if (!sub) {
/* Oops */
exit(EXIT_FAILURE); /* Something more sensible rather */
}
memcpy(sub, p, len+1);
sub[len+1] = 0;
a[1] = sub;
}
else {
a[1] = NULL;
}
}
else {
a[1] = NULL;
}
请注意,在这种情况下,最好使用strchr
查找单个字符。