我尝试分配内存,存储字符串然后打印它,但我认为它不起作用。
#include<stdio.h>
#include<windows.h>
int main()
{
char* allochere;
allochere = malloc(sizeof(char));
*allochere = "Hello";
printf("%s",allochere);
return 0;
}
答案 0 :(得分:3)
*allochere
的赋值仅为未初始化字符串的第一个字符赋值。分配的值对于引导是无意义的,因为赋值的右侧是指针。 (如果打开编译警告,编译器将警告您此类分配的问题。)
要正确初始化字符串,您需要调用strcpy
来复制字符串:
strcpy(allochere, "Hello");
此外,您需要使用正确的大小分配allochere
来保存您打算放在那里的字符串:
allochere = malloc(strlen("Hello") + 1);
答案 1 :(得分:2)
这里有几个错误。
首先,您应该知道C字符串以零字节结尾。多亏了这个,你不必存储字符串的长度,你只是用零字节说“这是我的字符串的结尾”。
其次,您以错误的方式致电malloc()
。如果要为N字母字符串分配内存,则应编写malloc(N + 1);
(+1,因为零字节也必须包含其单元格。)
最后,您应该使用strcpy
之类的函数将字符串复制到其目标。在这种情况下,您应该致电strcpy(allochere, "Hello")
。
您的代码应如下所示:
char* allochere;
allochere = malloc(6*sizeof(char));
strcpy(allochere, "Hello");
printf("%s", allochere);
...
// don't forget to deallocate the memory
free(allochere);
答案 2 :(得分:2)
该代码没有任何意义。
char *allochere;
'allochere'是指向char的指针,换句话说,是一个字符串。
allochere = malloc(sizeof(char));
现在你分配一个字符,然后指向'allochere'。顺便说一句,sizeof(char)
总是1。
*allochere = "Hello";
现在你将'allochere'的第一个char设置为'const char *',编译器会在这里barf。现在,allochere指向随机数据,而不是字符串。
让我们看看一些有效的选择。
char *allochere;
allochere = "Hello";
printf("%s", allochere);
char *allochere;
allochere = strdup("Hello");
printf("%s", allochere);
char *allochere;
allochere = malloc(strlen("Hello") + 1);
strcpy(allochere, "Hello");
printf("%s", allochere);
答案 3 :(得分:1)
你没有分配足够的内存来保存单词“Hello” - 你需要为5个字符加上终止字节分配空间,所以你应该用以下代码替换malloc调用:
allochere = malloc(6);
您无法将字符串文字分配给allochere,因为您将错过指向已分配内存的指针。相反,在分配足够的空间后,请使用strcpy:
strcpy(allochere, "Hello");
答案 4 :(得分:1)
你需要这样的东西。
#include<stdio.h>
#include<windows.h>
int main()
{
char* allochere;
allochere = malloc(strlen("Hello") + 1);
strcpy(allochere, "Hello");
printf("%s\n", allochere);
return 0;
}
答案 5 :(得分:0)
在这种情况下,您需要将数据直接从字符串常量"Hello"
复制到已分配的空间中。然而,在我们到达那里之前,有几个问题。
确保您分配足够的空间。
您正在分配sizeof
一个字符,不足以容纳整个字符串(“Hello”中的5个字符加上null终止符的一个字符)。您可以使用
allochere = malloc(6);
或使用
的通用惯例allochere = malloc(strlen("Hello") + 1);
更清楚地说明为内存分配的大小和目的。
您需要复制数据,因为字符串分配并不能准确理解您要执行的操作。通过做
*allochere = "Hello";
您实际上是将allochere
的值指定为"Hello"
的地址。如果你做了这个:
allochere = "Hello";
这实际上可能有效(在某些系统上 - 我不确定并且没有测试过),但那是因为你要分配地址并将其写入地址。
但是,您malloc
数据意味着要复制数据。因此,您需要使用strcpy
之类的东西从该位置复制到您分配的字符串中。因此:
strcpy(allochere, "Hello");
最后一个问题是实际看到输出。因为您正在使用printf
,所以您需要将数据刷新到屏幕。如果您有换行符(printf
),'\n'
会自动刷新数据,但您也可以使用fflush()
。