我键入以下代码:
#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
的内存区域之外,因此该程序可能正在访问周围其他任何内容的内存;这可能会导致崩溃。