0

这是我的代码

char* a[10];
a[0]="'example'";
char* p;
p=strstr(a[0],"'");

我知道 strstr 是否可以找到'它返回一个指向第一个字符的指针,即'. 我想取两者之间的值'并将其保存在a[1]. 我该怎么做?结果 a[1]"example"

4

2 回答 2

2

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所有NULLs,这样就知道填充了哪些元素:

char* a[10] = { NULL };

并且调用指针是安全free()NULL(什么都不做)。

于 2012-08-06T21:57:16.047 回答
1

只需找到下一次出现'并复制子字符串:

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查找单个字符。

于 2012-08-06T21:55:48.213 回答