2012-08-06 64 views
0

處理這裏是我的代碼字符串在C

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

我知道的strstr可以找到它返回一個指向第一個字符是一個'指針'。我想取兩個'之間的值並將其保存在a[1]中。我該怎麼做?因此 a[1]"example"

+1

'if(p)a [1] = p + 1;'在第一個''後面做一個[1]點。你需要一些方法來查找*那個*字符串裏面的下一個''''。 – pmg 2012-08-06 21:53:38

+0

作業? (等等總垃圾浪費我的時間,每個人都會爲瘋狂的SO開發者刪除額外的字符) – 2012-08-06 22:00:17

+0

這不是作業! – Sara 2012-08-06 22:03:59

回答

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找到單個字符。

+0

準確地說,我正在尋找strchr.Thanks。 – Sara 2012-08-06 22:05:36

+1

'strncpy()'是一個[危險函數](http://the-flat-trantor-society.blogspot.com/2012/03/no-strncpy-is-not-safer-strcpy.html)。在這種情況下,由於您確切知道要複製多少個字節,因此'memcpy()'會更乾淨。 – 2012-08-06 22:24:29

+0

對,'memcpy'更好。雖然當你確切地知道需要複製多少字節時,那也是'strncpy'也是安全的情況。 – 2012-08-06 22:27:52

2

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 S,所以它被稱爲被填充什麼元素:

char* a[10] = { NULL }; 

,並在NULL指針調用free()是安全的(什麼都不做)。

+0

我需要的是strchr()。非常感謝。 – Sara 2012-08-06 22:06:07