因?yàn)閙ain()函數(shù)中的function_a函數(shù)聲明和實(shí)際的情況不一樣,真實(shí)情況是該函數(shù)有三個(gè)參數(shù),而你卻將其聲明為沒(méi)有參數(shù),所以在調(diào)用時(shí),傳入?yún)?shù)會(huì)有警告。
為洛浦等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及洛浦網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、洛浦網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
由于function_a的定義在main()之前,所以去掉主函數(shù)中的聲明即可,或者將聲明改為正確形式。
你輸入的\0被認(rèn)為是2個(gè)字符。
'\\'和'0',不是'\0'
至于輸入abcdefghij時(shí)出問(wèn)題,那是數(shù)組邊界問(wèn)題。
用字符數(shù)組保存字符串時(shí),要預(yù)留一個(gè)數(shù)組成員,用來(lái)保存結(jié)尾符號(hào)'\0'。
所以char[10]只能保存長(zhǎng)度為9的字符串。
printf輸出字符串的時(shí)候,只有遇到'\0'才會(huì)停止輸出。
'\0'的值就是0.它會(huì)一直輸出直到在后面連續(xù)的內(nèi)存里遇到'\0'
函數(shù)名: strrchr
功 能: 在串中查找指定字符的最后一個(gè)出現(xiàn)
用 法: char *strrchr(char *str, char c);
舉例:
[cpp] view plain copy
char fullname="./lib/lib1.so";
char *ptr;
ptr = strrchr(fullname,'/');
printf("filename is %s",++ptr);
//運(yùn)行結(jié)果:filename is lib1.so
函數(shù)名: strchr
功 能: 在串中查找指定字符的第一個(gè)出現(xiàn)
用 法: char *strchr(char *str, char c);
舉例:
[cpp] view plain copy
char fullname="./lib/lib1.so";
char *ptr;
ptr = strrchr(fullname,'.');
printf("after strchr() is %s",++ptr);
//運(yùn)行結(jié)果:after strchr() is /lib/lib1.so
函數(shù)名: strtok
功 能: 在串中查找指定字符的第一個(gè)出現(xiàn)
用 法: char *strtok(char *s, char *delim);
說(shuō)明:
1.strtok函數(shù)的實(shí)質(zhì)上的處理是,strtok在s中查找包含在delim中的字符并用NULL(’/0′)來(lái)替換,直到找遍整個(gè)字符串。這句話有兩層含義:(1)每次調(diào)用strtok函數(shù)只能獲得一個(gè)分割單位。(2)要獲得所有的分割單元必須反復(fù)調(diào)用strtok函數(shù)。
2.strtok函數(shù)以后的調(diào)用時(shí)的需用NULL來(lái)替換s.
3.形參s(要分割的字符串)對(duì)應(yīng)的變量應(yīng)用char s[]=”….”形式,而不能用char *s=”….”形式。
舉例:
[cpp] view plain copy
void main()
{
char buf[]=”Golden Global View”;
char* token = strtok( buf, ” “);
while( token != NULL )
{
printf( ”%s “, token );
token = strtok( NULL, ” “);
}
return 0;
}
/*其結(jié)果為:
Golden
Global
View
*/
函數(shù)名:strncpy
功能:把src所指由NULL結(jié)束的字符串的前n個(gè)字節(jié)復(fù)制到dest所指的數(shù)組中
用法:char *strncpy(char *dest, char *src, int n);
說(shuō)明:
如果src的前n個(gè)字節(jié)不含NULL字符,則結(jié)果不會(huì)以NULL字符結(jié)束。
如果src的長(zhǎng)度小于n個(gè)字節(jié),則以NULL填充dest直到復(fù)制完n個(gè)字節(jié)。
src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來(lái)容納src的字符串。
返回指向dest的指針。
舉例:
[c-sharp] view plain copy
#include syslib.h
#include string.h
main()
{
char buf[4];
char *s="abcdefg";
strncpy(buf,s,4);
printf("%s/n",buf);
return 0;
}
/*運(yùn)行結(jié)果:
abcd
*/
函數(shù)名: stpcpy
功 能: 拷貝一個(gè)字符串到另一個(gè)
用 法: char *stpcpy(char *destin, char *source);
舉例:
[cpp] view plain copy
#include stdio.h
#include string.h
int main(void)
{
char string[10];
char *str1 = "abcdefghi";
stpcpy(string, str1);
printf("%s/n", string);
return 0;
}
/*運(yùn)行結(jié)果
abcdefghi
*/
函數(shù)名: strcat
功 能: 字符串拼接函數(shù)
用 法: char *strcat(char *destin, char *source);
舉例:
[cpp] view plain copy
#include string.h
#include stdio.h
int main(void)
{
char destination[25];
char *blank = " ", *c = "C++", *Borland = "Borland";
strcpy(destination, Borland);
strcat(destination, blank);
strcat(destination, c);
printf("%s/n", destination);
return 0;
}
/*運(yùn)行結(jié)果:
Borland C++
*/
函數(shù)名: strcmp
功 能: 串比較
用 法: int strcmp(char *str1, char *str2);
看Asic碼,str1str2,返回值 0;兩串相等,返回0
舉例:
[cpp] view plain copy
#include string.h
#include stdio.h
int main(void)
{
char *buf1 = "aaa", *buf2 = "bbb";
int ptr;
ptr = strcmp(buf2, buf1);
if (ptr 0)
printf("buffer 2 is greater than buffer 1/n");
else if(ptr 0)
printf("buffer 2 is less than buffer 1/n");
else
printf("buffer 2 is equal with buffer 1/n");
return 0;
}
/*運(yùn)行結(jié)果:
buffer 2 is greater than buffer 1
*/
函數(shù)名: strncmpi
功 能: 將一個(gè)串中的一部分與另一個(gè)串比較, 不管大小寫(xiě)
用 法: int strncmpi(char *str1, char *str2, unsigned maxlen);
舉例:
[cpp] view plain copy
#include string.h
#include stdio.h
int main(void)
{
char *buf1 = "BBB", *buf2 = "bbb";
int ptr;
ptr = strcmpi(buf2, buf1);
if (ptr 0)
printf("buffer 2 is greater than buffer 1/n");
if (ptr 0)
printf("buffer 2 is less than buffer 1/n");
if (ptr == 0)
printf("buffer 2 equals buffer 1/n");
return 0;
}
函數(shù)名: strcspn
功 能: 在串中查找第一個(gè)給定字符集內(nèi)容的段
用 法: int strcspn(char *str1, char *str2);
舉例:
[cpp] view plain copy
#include stdio.h
#include string.h
#include alloc.h
int main(void)
{
char *string1 = "1234567890";
char *string2 = "747DC8";
int length;
length = strcspn(string1, string2);
printf("Character where strings intersect is at position %d/n", length);
return 0;
}
函數(shù)名: strdup
功 能: 將串拷貝到新建的位置處
用 法: char *strdup(char *str);
舉例:
[cpp] view plain copy
#include stdio.h
#include string.h
#include alloc.h
int main(void)
{
char *dup_str, *string = "abcde";
dup_str = strdup(string);
printf("%s/n", dup_str);
free(dup_str);
return 0;
}
函數(shù)名: stricmp
功 能: 以大小寫(xiě)不敏感方式比較兩個(gè)串
用 法: int stricmp(char *str1, char *str2);
舉例:
[cpp] view plain copy
#include string.h
#include stdio.h
int main(void)
{
char *buf1 = "BBB", *buf2 = "bbb";
int ptr;
ptr = stricmp(buf2, buf1);
if (ptr 0)
printf("buffer 2 is greater than buffer 1/n");
if (ptr 0)
printf("buffer 2 is less than buffer 1/n");
if (ptr == 0)
printf("buffer 2 equals buffer 1/n");
return 0;
}
函數(shù)名: strerror
功 能: 返回指向錯(cuò)誤信息字符串的指針
用 法: char *strerror(int errnum);
舉例:
[cpp] view plain copy
#include stdio.h
#include errno.h
int main(void)
{
char *buffer;
buffer = strerror(errno);
printf("Error: %s/n", buffer);
return 0;
}
函數(shù)名: strncmp
功 能: 串比較
用 法: int strncmp(char *str1, char *str2, int maxlen);
舉例:
[cpp] view plain copy
#include string.h
#include stdio.h
int main(void)
{
char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";
int ptr;
ptr = strncmp(buf2,buf1,3);
if (ptr 0)
printf("buffer 2 is greater than buffer 1/n");
else
printf("buffer 2 is less than buffer 1/n");
ptr = strncmp(buf2,buf3,3);
if (ptr 0)
printf("buffer 2 is greater than buffer 3/n");
else
printf("buffer 2 is less than buffer 3/n");
return(0);
}
函數(shù)名: strncmpi
功 能: 把串中的一部分與另一串中的一部分比較, 不管大小寫(xiě)
用 法: int strncmpi(char *str1, char *str2, int len);
舉例:
[cpp] view plain copy
#include string.h
#include stdio.h
int main(void)
{
char *buf1 = "BBBccc", *buf2 = "bbbccc";
int ptr;
ptr = strncmpi(buf2,buf1,3);
if (ptr 0)
printf("buffer 2 is greater than buffer 1/n");
if (ptr 0)
printf("buffer 2 is less than buffer 1/n");
if (ptr == 0)
printf("buffer 2 equals buffer 1/n");
return 0;
}
函數(shù)名: strnset
功 能: 將一個(gè)串中的所有字符都設(shè)為指定字符
用 法: char *strnset(char *str, char ch, unsigned n);
舉例:
[cpp] view plain copy
#include stdio.h
#include string.h
int main(void)
{
char *string = "abcdefghijklmnopqrstuvwxyz";
char letter = 'x';
printf("string before strnset: %s/n", string);
strnset(string, letter, 13);
printf("string after strnset: %s/n", string);
return 0;
}
函數(shù)名: strpbrk
功 能: 在串中查找給定字符集中的字符
用 法: char *strpbrk(char *str1, char *str2);
舉例:
[cpp] view plain copy
#include stdio.h
#include string.h
int main(void)
{
char *string1 = "abcdefghijklmnopqrstuvwxyz";
char *string2 = "onm";
char *ptr;
ptr = strpbrk(string1, string2);
if (ptr)
printf("strpbrk found first character: %c/n", *ptr);
else
printf("strpbrk didn't find character in set/n");
return 0;
}
函數(shù)名: strrev
功 能: 串倒轉(zhuǎn)
用 法: char *strrev(char *str);
舉例:
[cpp] view plain copy
#include string.h
#include stdio.h
int main(void)
{
char *forward = "string";
printf("Before strrev(): %s/n", forward);
strrev(forward);
printf("After strrev(): %s/n", forward);
return 0;
}
/*運(yùn)行結(jié)果:
Before strrev(): string
After strrev(): gnirts
*/
函數(shù)名: strstr
功 能: 在串中查找指定字符串的第一次出現(xiàn)
用 法: char *strstr(char *str1, char *str2);
舉例:
[cpp] view plain copy
#include stdio.h
#include string.h
int main(void)
{
char *str1 = "Borland International", *str2 = "nation", *ptr;
ptr = strstr(str1, str2);
printf("The substring is: %s/n", ptr);
return 0;
}
函數(shù)名: strtod
功 能: 將字符串轉(zhuǎn)換為double型值
用 法: double strtod(char *str, char **endptr);
舉例:
[cpp] view plain copy
#include stdio.h
#include stdlib.h
int main(void)
{
char input[80], *endptr;
double value;
printf("Enter a floating point number:");
gets(input);
value = strtod(input, endptr);
printf("The string is %s the number is %lf/n", input, value);
return 0;
}
函數(shù)名: strtol
功 能: 將串轉(zhuǎn)換為長(zhǎng)整數(shù)
用 法: long strtol(char *str, char **endptr, int base);
舉例:
[cpp] view plain copy
#include stdlib.h
#include stdio.h
int main(void)
{
char *string = "87654321", *endptr;
long lnumber;
/* strtol converts string to long integer */
lnumber = strtol(string, endptr, 10);
printf("string = %s long = %ld/n", string, lnumber);
return 0;
}
函數(shù)名: strupr
功 能: 將串中的小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)字母
用 法: char *strupr(char *str);
舉例:
[cpp] view plain copy
#include stdio.h
#include string.h
int main(void)
{
char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;
/* converts string to upper case characters */
ptr = strupr(string);
printf("%s/n", ptr);
return 0;
}
字符串函數(shù)string.h
在頭文件string.h中定義了兩組字符串函數(shù)。第一組函數(shù)的名字以str開(kāi)頭;第二組函數(shù)的名字以mem開(kāi)頭。只有函數(shù)memmove對(duì)重疊對(duì)象間的拷貝進(jìn)行了定義,而其他函數(shù)都未定義。比較類函數(shù)將其變量視為unsigned char類型的數(shù)組。
1.strcpy
#include string.h
char *strcpy(char *str1, const char *str2);
把字符串str2(包括'\0')拷貝到字符串str1當(dāng)中,并返回str1。
2. strncpy
#include string.h
char *strncpy(char *str1, const char *str2, size_t count);
把字符串str2中最多count個(gè)字符拷貝到字符串str1中,并返回str1。如果str2中少于count個(gè)字符,那么就用'\0'來(lái)填充,直到滿足count個(gè)字符為止。
3.strcat
#include string.h
char *strcat(char *str1, const char *str2);
把str2(包括'\0')拷貝到str1的尾部(連接),并返回str1。其中終止原str1的'\0'被str2的第一個(gè)字符覆蓋。
4.strncat
#include string.h
char *strncat(char *str1, const char *str2, size_t count);
把str2中最多count個(gè)字符連接到str1的尾部,并以'\0'終止str1,返回str1。其中終止原str1的'\0'被str2的第一個(gè)字符覆蓋。
注意,最大拷貝字符數(shù)是count+1。
5.strcmp
#include string.h
int strcmp(const char *str1, const char *str2);
按字典順序比較兩個(gè)字符串,返回整數(shù)值的意義如下:
小于0,str1小于str2;
等于0,str1等于str2;
大于0,str1大于str2;
6 strncmp
#include string.h
int strncmp(const char *str1, const char *str2, size_t count);
同strcmp,除了最多比較count個(gè)字符。根據(jù)比較結(jié)果返回的整數(shù)值如下:
小于0,str1小于str2;
等于0,str1等于str2;
大于0,str1大于str2;
7 strchr
#include string.h
char *strchr(const char *str, int ch);
返回指向字符串str中字符ch第一次出現(xiàn)的位置的指針,如果str中不包含ch,則返回NULL。
8 strrchr
#include string.h
char *strrchr(const char *str, int ch);
返回指向字符串str中字符ch最后一次出現(xiàn)的位置的指針,如果str中不包含ch,則返回NULL。
9 strspn
#include string.h
size_t strspn(const char *str1, const char *str2);
返回字符串str1中由字符串str2中字符構(gòu)成的第一個(gè)子串的長(zhǎng)度。
10 strcspn
#include string.h
size_t strcspn(const char *str1, const char *str2);
返回字符串str1中由不在字符串str2中字符構(gòu)成的第一個(gè)子串的長(zhǎng)度。
11 strpbrk
#include string.h
char *strpbrk(const char *str1, const char *str2);
返回指向字符串str2中的任意字符第一次出現(xiàn)在字符串str1中的位置的指針;如果str1中沒(méi)有與str2相同的字符,那么返回NULL。
12 strstr
#include string.h
char *strstr(const char *str1, const char *str2);
返回指向字符串str2第一次出現(xiàn)在字符串str1中的位置的指針;如果str1中不包含str2,則返回NULL。
13 strlen
#include string.h
size_t strlen(const char *str);
返回字符串str的長(zhǎng)度,'\0'不算在內(nèi)。
14 strerror
#include string.h
char *strerror(int errnum);
返回指向與錯(cuò)誤序號(hào)errnum對(duì)應(yīng)的錯(cuò)誤信息字符串的指針(錯(cuò)誤信息的具體內(nèi)容依賴于實(shí)現(xiàn))。
15 strtok
#include string.h
char *strtok(char *str1, const char *str2);
在str1中搜索由str2中的分界符界定的單詞。
對(duì)strtok()的一系列調(diào)用將把字符串str1分成許多單詞,這些單詞以str2中的字符為分界符。第一次調(diào)用時(shí)str1非空,它搜索str1,找出由非str2中的字符組成的第一個(gè)單詞,將str1中的下一個(gè)字符替換為'\0',并返回指向單詞的指針。
隨后的每次strtok()調(diào)用(參數(shù)str1用NULL代替),均從前一次結(jié)束的位置之后開(kāi)始,返回下一個(gè)由非str2中的字符組成的單詞。當(dāng)str1中沒(méi)有這樣的單詞時(shí)返回NULL。每次調(diào)用時(shí)字符串str2可以不同。
如:
char *p;
p = strtok("The summer soldier,the sunshine patriot", " ");
printf("%s", p);
do {
p = strtok("\0", ", "); /* 此處str2是逗號(hào)和空格 */
if (p)
printf("|%s", p)
} while (p);
顯示結(jié)果是:The | summer | soldier | the | sunshine | patriot