解決C++中[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]

#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 *爲棄用的轉換

原因:

  1. 主程序初始化字符串,是字符串常量, 該字符串的內存分配在全局的const內存區
  2. 而char* 聲明瞭一個指針,而這個指針指向的是全局的const內存區,const內存區當然不會讓你想改就改的。所以,如果你一定要寫這塊內存的話,那就是一個非常嚴重的內存錯誤。

修改:
char* s 改爲 char s[]即可。引用字符串中具體字符的時候*(s+i)s[i]都可以。
ps:有關於char* schar s[]的區別見博客。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章