2012-05-10 34 views

回答

4

可以使用memcpy()功能,該功能在string.h頭文件。

memcpy()在內存塊(有時稱爲緩衝區)之間複製數據字節。這個函數並不關心被複制的數據的類型 - 它只是簡單地進行逐字節拷貝。函數原型是

void *memcpy(void *dest, void *src, size_t count); 

參數dest和src分別指向目標和源存儲器塊。 count指定要複製的字節數。返回值是dest。

如果兩塊內存重疊,則該功能可能無法正常運行 - src中的某些數據在複製之前可能會被覆蓋。使用下面討論的memmove()函數來處理重疊的內存塊。將在下面的程序中演示memcpy()

您還可以找到在這裏爲這些函數的一個例子:http://www.java-samples.com/showtutorial.php?tutorialid=591

4

如果您不會將原始字符串用於其他任何內容,則可以直接使用&s[4]。如果你需要一個副本,做

char new_str[STR_SIZE + 1] = {0}; 
strncpy(new_str, &s[4], STR_SIZE); 
+2

'strncpy()',儘管它的名字,被設計用於處理未終止的字符數組。您的代碼可能會在沒有'\ 0'的情況下離開'new_str'。添加'new_str [STR_SIZE] = 0'或確保您有足夠的空間並使用'strcpy()'。 – pmg

+0

固定。謝謝。 –

0

如果我理解正確的話,你需要使用一些分隔符,爲了分手的子字符串。比如「一二三」打破了一二三。如果是這樣的話:

#include <stdio.h> 
#include <string.h> 
int main() 
{ 
    char test[] = "one#two#three"; 
    char* res; 
    res = strtok(test, "#"); 
    while(res) { 
     printf("%s\n", res); 
     res = strtok(NULL, "#"); 
    } 

    return 0; 
} 

您使用要標記的字符串調用strtok()一次。以下每個調用都應該傳遞NULL,以便繼續第一次調用該字符串。 另外請注意,strtok可能會修改原始指針,因此如果它是動態分配的,則應在將它傳遞給strtok之前保存它。

+0

我沒有任何分隔符,我也不想寫任何額外的代碼,因爲它會被視爲冗餘。我想使用任何庫函數。 – maddy2012

+1

strtok()是庫函數,但我誤解了你的問題,所以我的帖子是不相關的。抱歉。 –

1

如果你也知道字符串中的字符從你想要得到的子串,那麼你可以使用strstr函數。它查找子字符串。但是如果你不知道你要檢索的字符,那麼你可以使用strcpy或strncpy來獲取Eric所提到的字符串。