關於字符串常考函數

1、strcpy

原型聲明:char *strcpy(char* dest, const char *src);
頭文件:#include <string.h> 和 #include <stdio.h>
功能:把從src地址開始且含有NULL結束符的字符串複製到以dest開始的地址空間
說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
返回指向dest的指針
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char *str = "hello";
	char *str1 = (char *)malloc(100);
	strcpy(str1,str);
	printf("%s",str1);
	return 0;
}


2、strstr

頭文件:#include <string.h

功能:搜索一個字符串在另一個字符串中的第一次出現。找到所搜索的字符串,則該函數返回第一次匹配的字符串的地址;如果未找到所搜索的字符串,則返回NULL

strstr(string,search) : string:規定被搜索的字符串。search:規定所搜索的字符串

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char *str = "hello";
	char *str1 = "I say hello xiaopang";
	char *p = strstr(str1,str);
	printf("%s",p);
	return 0;
}


3、strcat

頭文件:#include <string.h

功能:將兩個char類型鏈接

原型:char *strcat(char *dest,char *src); 把src所指字符串添加到dest結尾處(覆蓋dest結尾處的'\0')並添加'\0'

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char *str = "hello";
	char *str1 = "I say hello xiaopang";
	strcat(str1,str);
	printf("%s\n",str1);
	return 0;
}
輸出錯誤,把str接在str1後面,必須保證str1空間足夠大,可以方向兩個字符串的長度和


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char *str= "hello";
	char str1[100] = "I say hello xiaopang ";
	strcat(str1,str);
	printf("%s\n",str1);
	return 0;
}
此時輸出正確


4、memset

頭文件:<memory.h>或<string.h>

void *memset(void *s, int ch, size_t n);
函數解釋:將s中前n個字節 (typedef unsigned int size_t )用 ch 替換並返回 s 。
memset:作用是在一段內存塊中填充某個給定的值,它是對較大的結構體數組進行清零操作的一種最快方法
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char str[10]= "hello";
	printf("%s\n",str);
	memset(str,'\0',strlen(str));
	printf("%d,%d,%d,%d\n",str[0],str[1],str[9]);
	return 0;
}


5、memcpy

功能:memcpy函數的功能是從源src所指的內存地址的起始位置開始拷貝n個字節到目標dest所指的內存地址的起始位置中。函數返回指向dest的指針

頭文件:#include<string.h>

void *memcpy(void *dest, const void *src, size_t n);

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char str[10]= "hello";
	char str1[10] = "123";
	void *p = memcpy(str1,str,sizeof(char)*6);
	printf("%s\n%s\n",str1,p);
	return 0;
}

6、puts

puts()函數用來向標準輸出設備(屏幕)寫字符串並換行

(1). puts()函數只能輸出字符串, 不能輸出數值或進行格式變換。
(2). 可以將字符串直接寫入puts()函數中。如:
puts("Hello, world!");
(3). puts 和 printf 的用法一樣,puts()函數的作用與語句“printf("%s\n",s);的作用相同。注意:puts在輸出字 符串後會自動輸出一個回車符。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char str[10]= "hello";
	char *p = "xiaopang";
	puts(str);
	puts(p);
	return 0;
}
7、gets從標準輸入設備讀字符串函數。可以無限讀取,不會判斷上限,以回車結束讀取從stdin流中讀取字符串,直至接受到換行符或EOF時停止,並將讀取的結果存放在buffer指針所指向的字符數組中。換行符不作爲讀取串的內容,讀取的換行符被轉換爲‘\0’空字符,並由此來結束字符串。
gets(s)函數與scanf("%s",s)相似,但不完全相同,使用scanf("%s",s) 函數輸入字符串時存在一個問題,就是如果輸入
<span style="font-family: arial, 宋體, sans-serif; text-indent: 2em; background-color: initial;">了空格會認爲字符串結束,空格後的字符將作爲下一個輸入項處理,但gets()函數將接收輸入的整個字符串直到遇到換行爲止。</span>
也就是說:gets()函數讀取到\n(我們輸入的回車)於是停止讀取,但是它不會把\n包含到字符串裏面去。然而,和它配合使用的puts函數,卻在輸出字符串的時候自動換行。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
	char str[10];
	char str1[10];
	gets(str);//可以接收空格
	scanf("%s",str1);//空格後內容不再接收
	puts(str);
	puts(str1);
	
	return 0;
}
8、sprintf
字符串格式化命令,主要功能是把格式化的數據寫入某個字符串中。sprintf 是個變參函數

頭文件 stdio.h

原型

int sprintf( char *buffer, const char *format, [ argument] … );

參數列表

bufferchar型指針,指向將要寫入的字符串的緩衝區。
format:格式化字符串。
[argument]...:可選參數,可以是任何類型的數據。
返回值:字符串長度(strlen
#include <stdio.h>

int main()
{
	char *str;
	sprintf(str,"%d",12);
	
	return 0;
}
錯誤,沒有爲str申請空間

#include <stdio.h>
#include <stdlib.h>
int main()
{
	char *str = (char *)malloc(100);
	char str1[20];
	sprintf(str,"%d",12);
	sprintf(str1, "%-4d %d",12,1234);
	printf("%s\n",str);
	printf("%s",str1);
	return 0;
}

9、sscanf

sscanf() - 從一個字符串中讀進與指定格式相符的數據。

#include <stdio.h>
#include <stdlib.h>
int main()
{
	char *str = "0123456789";
	char buffer[10];
	sscanf(str,"%5s",buffer);
	puts(buffer);
	return 0;
}




發佈了58 篇原創文章 · 獲贊 21 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章