相关疑难解决方法(0)

为什么在写入用"char*s"而不是"char s []"初始化的字符串时会出现分段错误?

以下代码在第2行接收seg错误:

char *str = "string";
str[0] = 'z';  // could be also written as *str = 'z'
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

虽然这非常有效:

char str[] = "string";
str[0] = 'z';
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

经过MSVC和GCC测试.

c c-strings segmentation-fault

277
推荐指数
10
解决办法
7万
查看次数

两个程序中指针的地址可以相等吗?

当两个程序同时运行,并且您打印指针指向的地址时,是否会发生两个程序打印相同的值?

c pointers

26
推荐指数
4
解决办法
1631
查看次数

如果我在if语句中定义一个数组,那么内存是否被分配?

如果我在if语句中定义一个数组,那么在编译期间会分配内存,例如.

if(1)
{
    int a[1000];
} 
else
{
    float b[1000];
}
Run Code Online (Sandbox Code Playgroud)

然后2 * 1000为ints + 4 * 1000浮点数的内存分配?

c memory arrays

8
推荐指数
1
解决办法
1355
查看次数

理解C中的堆栈帧

我试图理解C中的堆栈帧,所以我写了一个简单的C代码来分析堆栈帧.

  • 首先,fun1()返回一个局部变量的地址,该地址变量被初始化为10到ptr,这会导致警告但是没关系...如果我打印*ptr的值现在它打印10,即使这很好.. .

  • 接下来fun2()返回一个甚至没有初始化的局部变量的地址,如果我尝试打印*ptr的值,现在它打印10,无论我是否返回a或b的地址...

  • 为了理解这里发生了什么,我使用了gdb.使用gdb,我开始一步一步调试,当我到达fun2()中的" return&a " 行时,我试图打印b的地址,打印&b但是打印 不能取"b"的地址不是一个左值.

我不明白,当我尝试打印a的地址,打印和打印绝对精细,然后为什么不b的地址.*为什么a不是一个左值?

# include <stdio.h>

int * fun1() {
    int a = 10; 
    return &a; 
}

int * fun2()
{
    int a;
    int b;
    return &a;           // return &b;
}

int main ()  
{
    int *ptr;
    ptr = fun1();
    ptr = fun2();
    printf ("*ptr = %d, fun2() called...\n", *ptr);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c gcc gdb memory-layout

6
推荐指数
1
解决办法
779
查看次数

对char*的写权限

Coincise问题:需要能够在c ++中修改char*的内容.

我有一个类似这样的函数:char*buffer =(char*)FUNCTION

现在我需要修改'缓冲',例如做这样的缓冲区[1] ="h";

我尝试过的是以下内容:char*string ="Hello World"; char buffer [65]; //我仍然需要知道确切的大小strcpy(buffer,string); buffer [1] ="r";

我也尝试过malloc.不幸的是,编译器总是抱怨以下内容:"无法从const char [2]转换为char".这发生在Windows上.我对g ++编译器没有这个问题.

我查看了以下链接,但仍然无法做任何事情. http://www.developerweb.net/forum/archive/index.php/t-3517.html 关于C中的字符指针 是否可以修改C中的字符串?

谢谢

c++ char

3
推荐指数
1
解决办法
377
查看次数

全局数组是否在堆栈上分配

显然,所有本地数组(未动态分配)都在堆栈中,但是也是位于堆栈上的全局数组?

其他类型的全局变量都在堆上,但我得到的提示是数组是一个不同的故事,并分配在堆栈的底部.那是真的吗?

同样,我不是在谈论总是在堆上的动态分配的.

c memory-management

3
推荐指数
1
解决办法
450
查看次数