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

新手问一段代码

哈哥 发布于 2012-07-22 17:29, 300 次点击
程序代码:
#include "stdafx.h"
#include <string.h>
#include <stdlib.h>
#include <iostream>

using namespace std;
int main(int argc, char* argv[])
{
    char a[]  = "abc";
    int n = strcmp(a,"abc");
    cout<<n<<endl;
    strcpy(a,"def");
    cout<<a<<endl;

    char* b = (char*)malloc(strlen(a)+strlen("abc")+1);
    strcpy(b,a);
    strcat(b,"abc");
    cout<<b<<endl;
    return 0;
}


请问为什么将里面的char a[] = "abc"换成char* a = "abc",运行时会发生内存不能为written的错误?
2 回复
#2
pangding2012-07-22 18:09
char a[] = "abc" 相当于 char a[4]; a[0] = 'a'; a[1] = 'b'; a[2] = 'c'; a[3] = '\0';
而 char *a = "abc" 就是让 a 指向一个字符串字面 "abc"。它是常量,不能修改。效果和 1 = 5 一样,左边是一个常数,不能赋值。

在实现的原理上,"abc" 一般在编译的时候,会生成在只读数据段里。对只读段修改会产生写只读异常。

[ 本帖最后由 pangding 于 2012-7-22 18:12 编辑 ]
#3
哈哥2012-07-22 20:48
这样呀。谢谢了
1