在c語言中有許多字串處理函式,在寫程式的時候常常想不起來或則不了解區別,今天就花點時間將這些函式做個總結,以便以後查詢使用。
當使用scanf 函式來讀取字串的時候需要注意兩點:char buf[10] = ;
scanf("%s", buf);//輸入:tttt3
printf("buf = %s\n", buf);//結果:buf = tttt3
char buf1[10] = ;
scanf_s("%s", buf1, 10);//輸入:yyyy355
printf("buf1 = %s\n", buf1);//結果:buf1 = yyyy355
① scanf 函式如果輸入的字元數大於定義的字元陣列長度就會出現緩衝區溢位。
② 當輸入的字串中包含空格時,scanf 和 scanf_s 函式只會接收空格前的字串。例如:hello world 則只會接收到:hello
③ scanf_s 函式最後乙個引數代表緩衝區的大小,示例中緩衝區大小為10,但最多能放入9個字元,因為最後乙個需要放』\0』
① gets 函式解決了scanf 和 scanf_s 不能輸入空格的問題,但是沒有解決緩衝區溢位的問題。char buf[10] = ;
gets(buf);
gets_s(buf,10);
printf("buf = %s\n",buf);
② gets 函式由於也不安全所以被 gets_s 函式代替,該函式的後乙個引數代表緩衝區大小。
① fgets 改進了 gets 函式緩衝區溢位的問題,fgets 函式是為讀取檔案設計的,char buf[10] = ;
fgets(buf, sizeof(buf), stdin);//輸入:devbird
printf("buf = %s\n", buf);//輸出:buf = devbird
所以讀取鍵盤時沒有 gets 那麼方便。
② fgets 函式是安全函式,所以程式中使用此函式更安全。
這兩個函式都是輸出函式,區別在於 printf_s 函式會檢查前面乙個引數的格式化字元是否合法。char* str="hello world";
printf("%s\n",str);
printf_s("%s\n",str);
① puts 函式與 printf 不同,會自動在末尾新增乙個』\n』char* str="hello world";
puts(str);
fputs(str,stdout);
② fputs 函式和 fgets 函式一樣也是安全的函式,在程式中使用更安全。
該函式是計算字串長度的函式,但不包含字串結尾的』\0』char* str = "12345";
int len = strlen(str);
printf("len = %d\n", len);
① 這兩個函式都是拼接字串的函式。char str1[10] = ;
char str2[5] = ;
strcat(str1, str2);//把str2追加到str1的後面
strncat(str1, str2, sizeof(str1) – strlen(str1) - 1);//把str2追加到str1的後面,最後乙個引數是str1剩餘的長度。
printf("string = %s\n", str1);
② str1一定要有足夠的空間來放str2,不然會記憶體溢位。
③ strncat 函式比 strcat 函式更安全。
① strcmp 函式,如果兩個字串相同,則返回0,否則為非0char* str1 = "hello";
char* str2 = "hellojj";
int result1 = strcmp(str1, str2);//比較兩個字串
printf("result1 = %d\n", result1);
int result2 = strncmp(str1, str2, 5);//最後乙個引數代表,比較兩個字串的前n個
printf("result2 = %d\n", result2);
② strncmp 函式,最後乙個引數代表比較的前n個字元,如果兩個數前n個相同則返回0,否則為非0
① 兩個函式都是拷貝字串函式,有緩衝區溢位危險。char strbuf[20] = ;
char* str = "hello devbird";
strcpy(strbuf, str);//將str中的字串拷貝到strbuf中
printf("strbuf = %s\n", strbuf);
strncpy(strbuf, str, 8);//將str中的前8個字元拷貝到strbuf中
printf("strbuf = %s\n", strbuf);
② strncpy 最後乙個引數代表要拷貝的字元數。
① printf是向螢幕輸出乙個字串。char buf[50];
sprintf(buf, "我有%d塊錢!", 100);
printf("buf = %s\n", buf);//輸出結果:buf = 我有100塊錢!
② sprintf是向char陣列輸出乙個字串,其他行為和printf一模一樣。
③ sprintf也存在緩衝區溢位的問題。
該函式是查詢字元的函式,如果能找到則返回當前字元及其後面的字元,否則返回為nullchar* str = "devbird";
char* result = strchr(str, 'b');
printf("result = %s\n", result);//結果:result = bird
char* res = strchr(str, 'z');
printf("res = %s\n", res);//結果:res = (null)
該函式是查詢子字串,返回值為子字串第一次出現的位置及其後面的字串,如果沒查詢到則返回為nullchar* str = "i am a android developer!";
char* substr = "android";
char* result = strstr(str, substr);
printf("result = %s\n", result);//結果:result = android developer!
字元在第一次呼叫時strtok()必需給予引數str字串,往後的呼叫則將引數str設定成null,每次呼叫成功則返回指向被分割出片段的指標。char
str = "2016/08/29 20:06:55";
char* result = strtok(str, "/");
while (result)
該函式是乙個將數字字串轉換成int型別的函式。char* str = "123";
int i = atoi(str);
printf("i = %d\n", i);//輸出:i = 123
該函式是將乙個數字字串轉換成float型別的函式。char* str = "29.3547";
float f = atof(str);
printf("f = %f\n", f);//輸出:f = 29.354700
該函式是將數字字串轉換成長整型的函式。char* str = "31465666";
long l = atof(str);
printf("ld = %ld\n", l);//輸出:ld = 31465666
① 使用該函式需要包含標頭檔案:int t = (int)time(null);
srand(t);
for (int i = 0; i < 3; i++)
#include
② 通過time函式生成乙個不同的int數。
C語言中的字串處理函式
strcasecmp 1,函式原型 int strcasecmp const char str1,const char str2 2,功能 比較str1和str2是否相等,忽略大小寫的差異 3,標頭檔案 include 4,返回值 str1 str2 返回0 str1 str2 返回大於0的值 st...
C語言中的字串處理函式
1 strcpy 複製字串 不安全 2 strncpy 複製n個字串 安全 3 strcat 連線字串 不安全 4 strncat 連線n個字串 安全 5 strcmp 字串比較,c語言中字串比較不能用 6 strlen 字串長度 7 strset 字串重置 9 memset 記憶體重置 10 me...
c語言中常字串處理的函式
為了更加的熟悉字串操作的函式,所以把相應的函式積累如下 1 sprintf 函式 把格式化的資料寫入某個字串 sprintf函式現在用的最多的就是用來各種型別轉換成字串的應用。標頭檔案 stdio.h 函式原型 int sprintf char buffer,const char format,ar...