處理這裏是我的代碼字符串在C
char* a[10];
a[0]="'example'";
char* p;
p=strstr(a[0],"'");
我知道的strstr可以找到它返回一個指向第一個字符是一個'
指針'
。我想取兩個'
之間的值並將其保存在a[1]
中。我該怎麼做?因此 a[1]
是"example"
。
處理這裏是我的代碼字符串在C
char* a[10];
a[0]="'example'";
char* p;
p=strstr(a[0],"'");
我知道的strstr可以找到它返回一個指向第一個字符是一個'
指針'
。我想取兩個'
之間的值並將其保存在a[1]
中。我該怎麼做?因此 a[1]
是"example"
。
只要找到的'
下一個出現並複製子:
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
找到單個字符。
準確地說,我正在尋找strchr.Thanks。 – Sara 2012-08-06 22:05:36
'strncpy()'是一個[危險函數](http://the-flat-trantor-society.blogspot.com/2012/03/no-strncpy-is-not-safer-strcpy.html)。在這種情況下,由於您確切知道要複製多少個字節,因此'memcpy()'會更乾淨。 – 2012-08-06 22:24:29
對,'memcpy'更好。雖然當你確切地知道需要複製多少字節時,那也是'strncpy'也是安全的情況。 – 2012-08-06 22:27:52
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()
是安全的(什麼都不做)。
我需要的是strchr()。非常感謝。 – Sara 2012-08-06 22:06:07
'if(p)a [1] = p + 1;'在第一個''後面做一個[1]點。你需要一些方法來查找*那個*字符串裏面的下一個''''。 – pmg 2012-08-06 21:53:38
作業? (等等總垃圾浪費我的時間,每個人都會爲瘋狂的SO開發者刪除額外的字符) – 2012-08-06 22:00:17
這不是作業! – Sara 2012-08-06 22:03:59