在C中如何初始化char*类型?

vmape 2003-11-14 11:37:04
如题,要求是在C中,在C++中我也知道应该用char* str=new char之类,但我们练习要求用C,所以麻烦大家啦!

另外,用char[]是自动就初始化了吧?我练习的时候发现,用char*必然出错,用char[]就可以得到正确的结果。

多谢!
...全文
10893 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
hamsky 2003-11-19
  • 打赏
  • 举报
回复
to arfi
main()
{
char *str="abcde";
strcpy(str,"hello");
printf("%s",str);
}
我在TC2.0编译通过!
kuangjingbo 2003-11-14
  • 打赏
  • 举报
回复
char *str="asdfasdf"


char *str;
str="asd"
arfi 2003-11-14
  • 打赏
  • 举报
回复
To hamsky(秋思原):
如果初始化时
char *str = "abcde";
再用strcpy(str, "hello");这样的函数来改写str指向的内容是非法的。
ionlic 2003-11-14
  • 打赏
  • 举报
回复
char *str = "hello";
hamsky 2003-11-14
  • 打赏
  • 举报
回复
char *str 是定义一个指针变量,没有开设内存空间来存放;如果要写入内容必须使用malloc(sizeof(char)*N)来分配一定的内存空间。
char str[]定义的是一个字符串变量,有一定长度的内存空间,str是字符串的地址,但写入内容时要考虑空间的大小

回:arfi()
如果你使用char *str;
可以 char *str = "abcde";
或者
char *str;
str = "abcde";
这种情况下的字符串只能读,不能改写。
**********************************
str的内容是可以通过strcpy()函数改写的,但不能超过长度,否则溢出。
wywggggaaaa2000 2003-11-14
  • 打赏
  • 举报
回复
char *str;
*str=null;
muyangzuo 2003-11-14
  • 打赏
  • 举报
回复
单个字符指针:char *str = (char *)malloc(sizeof(char));
字符串指针: char *str = (char *)malloc(length*sizeof(char));
KeepCoding 2003-11-14
  • 打赏
  • 举报
回复
char *str = NULL;
zhusunme 2003-11-14
  • 打赏
  • 举报
回复
这样可以的: char *str="dsadff";
arfi 2003-11-14
  • 打赏
  • 举报
回复
如果你使用char *str;
可以 char *str = "abcde";
或者
char *str;
str = "abcde";
这种情况下的字符串只能读,不能改写。

如果要改写的话,动态分配内存使用malloc
str = (char *)malloc(size);
释放的时候free(str);
sakura169 2003-11-14
  • 打赏
  • 举报
回复
char *str = (char*)malloc(sizeof(char));
strcpy(str,"asdf");
geeksky 2003-11-14
  • 打赏
  • 举报
回复
栈中数组是不能赋值的(char *也算数组吧。。。),只能给堆中的赋值,哎,表达能力不好,大概是这样了,说得不对请改正
zhouqingyuan 2003-11-14
  • 打赏
  • 举报
回复
估计楼主的意思是char*动态分配,那就用(char*)malloc(sizeof(char)*n)好了,对应new char(n);
michaelli 2003-11-14
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>

main()
{
char *str=NULL; //初始化

return 0;
}
chatairy 2003-11-14
  • 打赏
  • 举报
回复
一点拙见:
如果初始化成数组时,编译器自动分配内存,同用malloc分配内存是一样的。
不提倡在用指针初始化字符数组后再改写此数组,因为结果未定义,可能得出正确的结果,也可能结果不正确。为了省一点事而丧失了C的可移植性,不值得
happystudy 2003-11-14
  • 打赏
  • 举报
回复
如果仅是turboc 2.0 的话也可以不给出空间的,直接定义就可以了.
比如:
char *str;
.
.
str = "hello!';

char *str = "hello!";
不过一般情况下提倡用iceandifire的用法,
补充,如果你事先不知道字符串的长度(即不知道n的时候)你可以把n取的适当大些,或着用已有的字符串来给出大小空间,
比如:
char * str1 = "I"m a boy!";

char *str2 = (char *)malloc(sizeof(str1));
strcopy(str2,str1);



iceandfire 2003-11-14
  • 打赏
  • 举报
回复
上面写错了一点,是malloc的时候sizeof(char) * N
N是一定的大小
不好意思
iceandfire 2003-11-14
  • 打赏
  • 举报
回复
一般来说先给指针分配空间
char *str = (char *)malloc(sizeof(char));
然后将响应字符串copy到该空间去
strcpy(str, "hello");
用完后释放
free(str);
在将指针置为空,这样做的目的是防止出现野指针
str = NULL;
ilovedonny 2003-11-14
  • 打赏
  • 举报
回复
同意arfi()的观点,用char *str = "abcde";初始化的话,字符串只能读不能写~!

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧