| 网站首页 | 业界新闻 | 群组 | 人才 | 技术文章 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 111 人关注过本帖
标题:遇到一个问题 编译器一直编译不过去 好像内存冲突
只看楼主 收藏
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:100
专家分:146
注 册:2017-10-26
结帖率:57.14%
  问题点数:0  回复次数:3   
遇到一个问题 编译器一直编译不过去 好像内存冲突
#include<iostream>
#define D 50
using namespace std;
int replace(char *str, char c1, char c2);  //把字符串里char c1的字符改成char c2
int main()
{
    char *arr="a5a5a5a5a5a5a5a5a5a";
    int z;
   
    z = replace(arr, 'a', 'c');
    cout << "字符串:" << arr << endl;
    cout << "有" << z << "个字符a转换成c." << endl;

    system("pause");
    return 0;
}


int replace(char *str, char c1, char c2)
{
    int i = 0;
    char *st;
    st = str;
    while (st!='\0')
    {
        if (*st == c1)
        {
            i++;
            *st = c2;
        }
        st++;
    }
    return i;
   
}
大神来看看怎么回事?
2017-12-28 02:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:224
帖 子:5346
专家分:29807
注 册:2011-1-18
  得分:0 
编译器一直编译不过去 好像内存冲突
------ 编译失败,就应该贴出编译器给出的错误信息;但看你说“内存冲突”,那就是编译成功了而运行失败。不要说前后矛盾的话将别人弄糊涂。

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

size_t replace( char* str, char c1, char c2 );

int main( void )
{
    char arr[] = "a5a5a5a5a5a5a5a5a5a";

    size_t z = replace( arr, 'a', 'c' );
    cout << "字符串: " << arr << '\n';
    cout << "" << z << "个字符a转换成c." << endl;

    return 0;
}

size_t replace( char* str, char c1, char c2 )
{
    size_t cnt = 0;
    for( char* p=str; *p; ++p )
    {
        if( *p == c1 )
        {
            *p = c2;
            ++cnt;
        }
    }
    return cnt;
}

2017-12-28 08:28
新人学习
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:100
专家分:146
注 册:2017-10-26
  得分:0 
0x00A45D62 处的第一机会异常(在 测试.exe 中):  0xC0000005:  写入位置 0x00A4CC70 时发生访问冲突。
0x00A45D62 处有未经处理的异常(在 测试.exe 中):  0xC0000005:  写入位置 0x00A4CC70 时发生访问冲突。

线程 0x930 已退出,返回值为 -1073741510 (0xc000013a)。
程序“[7832] 测试.exe”已退出,返回值为 -1073741510 (0xc000013a)。
提示这样的错误

#include<iostream>
#define D 50
using namespace std;
int replace(char *str, char c1, char c2);  //把字符串里char c1的字符改成char c2
int main()
{
    char *arr="a5a5a5a5a5a5a5a5a5a";                 //把这里改成char arr[]="a5a5a5a5a5a5a5a5a5a";  编译器正常  *arr就运行不了~~高手解释下?
     int z;
   
    z = replace(arr, 'a', 'c');
    cout << "字符串:" << arr << endl;
    cout << "有" << z << "个字符a转换成c." << endl;

    system("pause");
    return 0;
}


int replace(char *str, char c1, char c2)
{
    int i = 0;
    char *st;
    st = str;
    while (st!='\0')     //改成while(*st)
    {
        if (*st == c1)
        {
            i++;
            *st = c2;
        }
        st++;
    }
    return i;
   
}
2017-12-28 08:49
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:19
帖 子:281
专家分:1057
注 册:2013-9-8
  得分:0 
通俗易懂

 char *arr="a5a5a5a5a5a5a5a5a5a";
 char *str == arr; == "a5a5a5a5a5a5a5a5a5a";
 char *st = str;  == "a5a5a5a5a5a5a5a5a5a";


"a5a5a5a5a5a5a5a5a5a" 是什么?
    字符串字面值. 字符常量构成的数组.
 
你要是用 arr[]就没什么事了.
所以说尽量少用指针    数组也是

hl928452957@gmail点com

2017-12-28 08:50







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

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