2012年2月21日 星期二

字串處理

被這個卡了半天,實在是太可恥了。趕快來寫下心得筆記

字串處理有幾個主要的方式。分別討論如下:

1)字串長度
2)字串複製
3)字串串連

1)字串長度
size_t strlen(const char*); /* size_t 為unsigned integer. but will be unsigned long in 64bit system */

/* sample code */

void main(void)
{
size_t string_len = 0;
char *string = "AlubaGood";

string_len = strlen(string);
printf("Lengtg of input string = %u \n\r",string_len);
}

如上sample code, 我們會得到string_len = 9


2)字串複製
如果要進行字串複製,可以使用strcpy()函式,若要複製字串中若干字元內容,則可以使用strncpy():
char* strcpy(char*, const char*);
char* strncpy(char*, const char*, size_t);

/* sample code */
void main(void)
{
char *string_1="abcdefg";
char *string_2="hijklmn";

strcpy(string_1,string_2);
printf("After copy, string_1=%s, string_2=%s \n\r",string_1,string_2);
}

上面的結果會show出 After copy , string_1=hijklmn, string_2=hijklmn
strcpy()是會把source string整個「蓋掉」destinaion string. 如果只是想要copy「某些長度」的string的話則要用strncpy()

上面的code如果把strcpy()換成strncpy(string_1,string_2,3); 則會show出 After copy, string_1=hij, string_2=hijklmn


3)字串串連
如果今天要做的是把兩個字串「相連/相加」在一起的話則是要用strcat(), 相連特定長度的話用strncat()

/* sample code */
void main(void)
{
char *string_1="abcdefg";
char *string_2="hijklmn";

strcat(string_1,string_2);
printf("After connect, string_1=%s, string_2=%s \n\r",string_1,string_2);
}
上面的結果會show出 After copy , string_1=abcdefghijklmn, string_2=hijklmn

如果把strcat()換成strncat(string_1,string_2,3); 則上面結果會變成 After copy , string_1=abcdefghij, string_2=hijklmn


Reference:
http://caterpillar.onlyfun.net/Gossip/CGossip/StringLengthCopyCat.html
http://www.cplusplus.com/reference/clibrary/cstring/strncat/

沒有留言:

張貼留言