C-一个实验,以创建一个从字符指针中创建一个字符串,但途中的错误



我键入以下代码:

#include <stdio.h>
int main()
{
    printf("Hello, World!n");
    char *S ,g;
    g= 'p';
    S = &g;
    char *n;
    *(S+1)= 'V';
    printf("The output is %s ",S);
    return 0;
}

我想看到的是,如果我将添加的" s"的价值分配给它,然后将字符v分配给它,那么它是否将指针" s"视为字符串的名称?(有可能)?

我将获得的输出是:输出为(null)

有什么建议和见解?

*(S+1)= 'V';

S是您将其设置为g地址的char*,它可以容纳足够的内存,用于 1 char。您正在访问记忆,即您的程序无权访问(*请参阅底部),因此巴哈维尔不确定。如果您在编译时不知道char*字符串的长度,则需要使用malloc()或它的变体为可变长度字符串分配内存。

size_t N = 64; // if your string is 63 characters -- you need the 64th for the null terminator
char* str = malloc(N * sizeof(*str));

或者,使用具有恒定最大尺寸的静态char数组,然后从那里走。

#define MAX_SIZE 64
...
char buff[MAX_SIZE];
  • 无权访问权利:您不应该访问您尚未保留的内存区域。g有足够的空间容纳一个字符。*(S+1)= 'V';试图将char一个字节放置在保留一个char的内存区域之外,因此该程序可能正在访问周围其他任何内容的内存;这可能会导致崩溃。

最新更新