注册 登录
编程论坛 C++教室

main()定义指针为什么会报错?

a75692074 发布于 2019-01-12 22:19, 2405 次点击
第11行报错
把 char *wail 改成 wail[15] 就可以运行
为什么不修改会报错?
求解!
程序代码:

#include <iostream>
using namespace std;

unsigned int c_in_str(const char * str, char ch);

int main()
{
    char mmm[15] = "minimum"; // 数组中的字符串
// 有些系统需要使用静态字符来启用数组初始化

    char *wail = "ululate"; // wail 指向字符串

    unsigned int ms = c_in_str(mmm, 'm');
    unsigned int us = c_in_str(wail, 'u');
    cout << ms << " m characters in " << mmm << endl;
    cout << us << " u characters in " << wail << endl;
    return 0;
}

// 这个函数计算字符串str中的ch字符数
unsigned int c_in_str(const char *str, char ch)
{
    unsigned int count = 0;

    while (*str) // 当*str为'\0'时退出
    {
        if (*str == ch)
            count++;
        str++; // 移动指针到下一个字符
    }
    return count;
}


[此贴子已经被作者于2019-1-12 22:20编辑过]

6 回复
#2
Jonny02012019-01-12 22:39
你的编译器可能支持 C++ 11
11 行报错的原因是因为 C++ 11 标准禁止字面值字符串向 char * 直接转型
Clang 给的是警告 :
warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wwritable-strings]
    char *wail = "ululate"; // wail 指向字符串
简单来说就是 C++ 11 禁止了字面值 const char * 向 char * 转型

[此贴子已经被作者于2019-1-13 11:00编辑过]

#3
lyb6612019-01-13 07:03
char *wail 是指针,表示字符串首个字符的地址。"ululate"是字符串字面值常量,这样初始化方式是错误的。我们可以在传递参数或者输出字符串的时候用字符指针作别名,但它只是数组中某个元素的指针。
#4
a756920742019-01-13 10:18
回复 2楼 Jonny0201
好的,谢谢啦
#5
a756920742019-01-13 10:19
回复 3楼 lyb661
明白了,谢谢
#6
rjsp2019-01-14 08:56
char *wail = "ululate";
改为
const char* wail = "ululate";

程序代码:
#include <iostream>
using namespace std;

size_t c_in_str( const char* str, char ch );

int main( void )
{
    char mmm[15] = "minimum";
    const char *wail = "ululate";

    size_t ms = c_in_str(mmm, 'm');
    size_t us = c_in_str(wail, 'u');
    cout << ms << " m characters in " << mmm << endl;
    cout << us << " u characters in " << wail << endl;
}

size_t c_in_str( const char* str, char ch )
{
    size_t count = 0;
    for( ; *str; ++str )
        if( *str == ch )
            ++count;
    return count;
}

#7
a756920742019-01-14 23:07
回复 6楼 rjsp
嗯,好的,谢谢啦亲
1