#include<stdio.h>
#include<string.h>
int main()
{
int substring(char* s, char a);
char *string= "aaabbbcc"; //warning的原因是字符串常量存放在const內存區...
//而字符串指針變量定義卻是指向char型,稍微有點區別,但是不影響結果。
char b = 'c';
printf("%d",substring(string,b));
return 0;
}
int substring(char* s, char a) //判斷一個字符是否存在於大的字符串中
{
int result=0;
for(int i=0;i<strlen(s);i++)
{
if(a==*(s+i))
{
result = 1;
//return 1;
}
//else break;
}
return result;
}
上面程序是一個簡單的判斷單個字符是否存在於長字符串中的程序,其中長字符串使用字符串指針變量指代,而沒有用字符串數組指代(char s[]
)。編譯提示 警告: 從字符串到char *爲棄用的轉換
原因:
- 主程序初始化字符串,是字符串常量, 該字符串的內存分配在全局的const內存區。
- 而char* 聲明瞭一個指針,而這個指針指向的是全局的const內存區,const內存區當然不會讓你想改就改的。所以,如果你一定要寫這塊內存的話,那就是一個非常嚴重的內存錯誤。
修改:
char* s
改爲 char s[]
即可。引用字符串中具體字符的時候*(s+i)
和s[i]
都可以。
ps:有關於char* s
和 char s[]
的區別見博客。