C学习笔记-字符串
對于C語言來說,字符串其實就是最后一個元素為’\0’的char數組
字符數組的初始化
字符數組常見的有兩種初始化方式
char str[] = "hello";或者
char str[] = {'h', 'e', 'l', 'l', 'o'};當使用sizeof(str)時,得到的大小為6,此時是算上了’\0’的。
如果不指定數組長度的初始化,末尾加上’\0’,否賊輸出長度未知
字符串可以存放在堆區,棧區和常量區
緩沖區溢出
char arr[3] = {0}; scanf(%s, arr); //當輸入長度大于2,會溢出如果輸入的字符大于字符數組的長度,會造成緩沖區溢出
scanf會以空格作為分隔符
字符串處理函數
gets
從輸入設備獲取輸入字符串
gets不會檢查預留緩沖區是否可容納輸入數據,沒有解決緩沖區溢出問題
fgets
fgets用于讀取文件,也可從鍵盤讀取,此時要使用stdin。fgets會截取長度符合輸入指定
char s[100] = { 0 }; fgets(s, sizeof(s), stdin);puts
puts函數打印字符串,與printf不同,puts會在最后自動添加一個’\n’
char s[] = "hello" puts(s);fputs
fputs是puts的文件操作版本,也不會輸出多余的’\n’
char s[] = "hello"; fputs(s, stdout);strlen,字符串長度
strlen返回字符串長度,不包含’\0’
strlen(arr);strcat,字符串追加
strcat(a,b);實現:
int len_a = strlen(a); int len_b = strlen(b); for ( int i = len_a; i < len_a + len_b; i++) {a[i] = b[i - lena]; }strncat,字符串有限追加
strncat(a, b, sizeof(a) - strlen(a) - 1);strcmp,字符串比較
如果相同返回0
strcmp(a, b);strncmp,字符串有限比較
只要指定長度內相同,則返回0
strncmp(a, "str", 3);strcpy字符串拷貝
把b拷貝到a
strcpy(a, b);strncpy字符串有限拷貝
防止拷貝越界
sprintf,格式化字符串
向char數組輸出一個字符串,其他行為和printf一模一樣
sprintf(a, "this is a %d", 10);strchr查找字符
返回一個位置的指針,如果沒找到,返回NULL
char *c = strchr(a, 'b');strstr查找子串
char *c = strstr(a, "abc");strtok分割字符串
字符在第一次調用時strtok()必需給予參數s字符串,往后的調用則將參數s設置成NULL每次調用成功則返回指向被分割出片段的指針
char buf[] = "abc@defg@igk"; char *p = strtok(buf, "@");; while (p) {printf("%s\n", p);p = strtok(NULL, "@"); }atoi轉化為int
將字符串整數轉化為整數
atoi(buf);atof轉化為float
將字符串整數轉化為單精度浮點數
atof(buf);atol轉化為long
將字符串整數轉化為long類型
atol(buf);轉載于:https://www.cnblogs.com/cj5785/p/10664804.html
總結
- 上一篇: 2013年最值得我们学习的网页作品示例【
- 下一篇: JAVA 数组元素的反转