| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
买学问 - 大牛一对一辅导,有问必答买学问 - 专业的付费知识问答平台
共有 445 人关注过本帖
标题:main()定义指针为什么会报错?
只看楼主 加入收藏
a75692074
Rank: 1
等 级:新手上路
威 望:1
帖 子:47
专家分:0
注 册:2018-7-20
结帖率:100%
  已结贴   问题点数:20  回复次数:6   
main()定义指针为什么会报错?
第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编辑过]

2019-01-12 22:19
Jonny0201
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:45
帖 子:467
专家分:2365
注 册:2016-11-7
  得分:10 
你的编译器可能支持 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编辑过]

2019-01-12 22:39
lyb661
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:18
帖 子:46
专家分:78
注 册:2018-12-12
  得分:10 
char *wail 是指针,表示字符串首个字符的地址。"ululate"是字符串字面值常量,这样初始化方式是错误的。我们可以在传递参数或者输出字符串的时候用字符指针作别名,但它只是数组中某个元素的指针。
2019-01-13 07:03
a75692074
Rank: 1
等 级:新手上路
威 望:1
帖 子:47
专家分:0
注 册:2018-7-20
  得分:0 
回复 2楼 Jonny0201
好的,谢谢啦
2019-01-13 10:18
a75692074
Rank: 1
等 级:新手上路
威 望:1
帖 子:47
专家分:0
注 册:2018-7-20
  得分:0 
回复 3楼 lyb661
明白了,谢谢
2019-01-13 10:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:306
帖 子:6373
专家分:37026
注 册:2011-1-18
  得分:0 
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;
}

2019-01-14 08:56
a75692074
Rank: 1
等 级:新手上路
威 望:1
帖 子:47
专家分:0
注 册:2018-7-20
  得分:0 
回复 6楼 rjsp
嗯,好的,谢谢啦亲
2019-01-14 23:07







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.098702 second(s), 9 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved