| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1094 人关注过本帖
标题:[求助]一个string的赋值和打印的问题 小萝卜这厢有礼了
只看楼主 加入收藏
南京小萝卜
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-7-29
收藏
 问题点数:0 回复次数:6 
[求助]一个string的赋值和打印的问题 小萝卜这厢有礼了
第一步,先看个小程序:

#include <stdio.h>

main()

{
char str[]="this is the original one.";
char *ptr_str;

ptr_str= str;
printf("Now ptr_str is :%s\n", ptr_str);

return 0;
}

运行没有问题。

第二步,改成:
 char str[]="this is the original one.";
char *ptr_str;

 str[]="this is not the original one.";
ptr_str= str;
printf("Now ptr_str is :%s\n", ptr_str);
编译的时候第三行出错。怎么回事?

第三步,可能不能给str[]先赋值,把第一行的赋值语句去掉,改成:
 char str[];
char *ptr_str;

 str[]="this is not the original one.";
ptr_str= str;
printf("Now ptr_str is :%s\n", ptr_str);
编译的时候第一行、第三行均出错。怎么回事?

第四步,把程序改得再简单一点,把char str[]干脆就去掉了:
char *ptr_str;

*ptr_str= "This is a simple test";
printf("Now ptr_str is :%s\n", ptr_str);
编译的时候没有错,但是有两个警告。但是运行不起来,系统出错。

请问各位大哥大姐,这是怎么回事?string真的让小萝卜头大了。谢谢。




搜索更多相关主题的帖子: 小萝卜 str 赋值 ptr 
2007-07-29 14:59
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 
str[]="this is not the original one."; 谁告诉你可以这样赋值 的?只能定义的时候用
char str[]; 数组的元素个数都么指定 能不错吗

char *ptr_str;
*ptr_str= "This is a simple test";
这样可以通过编译? 左边是一个字符 右边是一个字符窜

[此贴子已经被作者于2007-7-29 15:20:14编辑过]


天行健,君子以自强不息!!QQ:68660681
2007-07-29 15:19
南京小萝卜
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-7-29
收藏
得分:0 
 谢了,雾都大哥。

我改了一下:
 char str[80]="aaaaaaaaa";
char *ptr_str;

str[80]="bbbbbbbbb";
ptr_str= str;
printf("Now ptr_str is :%s\n", ptr_str);

 这下子str[80]定义了一个80个字符的数组。可是打印出来后,是:aaaaaaaa.
也就是说,第三句没有把值改过来。

其实我的问题在于:怎么样定义一个字符串,在程序的运行中间能修改值。
 我在第二行定义了一个 *ptr_str,指望它能在运行中被修改,就是主贴的第四步。但是不行,所以引入了一个str[80]的字符串数组,现在看来我还是不行。唯一能做的,是第一步。
忘了说一句,我用的是VC++,6.0版的。
 小萝卜刚学C,才疏学浅,还望各位赐教。
 谢谢啦。
2007-07-29 15:37
永久的守护
Rank: 1
等 级:新手上路
威 望:2
帖 子:425
专家分:6
注 册:2007-6-9
收藏
得分:0 
for(i = 0;i < strlen(str);++i)
ptr_str[i] = str[i] ;
C语言对字符串的赋值是一个一个字符赋值而得的
不能直接赋值

见了便做做了便放下了了有何不了,慧生于觉觉生于自在生生还是无生。
活则生变,简而至稳。
2007-07-29 15:48
jianweichief
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2007-7-18
收藏
得分:0 
只有初始化时,才可以直接一起赋值。

2007-07-29 16:10
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 
以下是引用南京小萝卜在2007-7-29 15:37:59的发言:
 谢了,雾都大哥。

我改了一下:
 char str[80]="aaaaaaaaa";
char *ptr_str;

str[80]="bbbbbbbbb";
ptr_str= str;
printf("Now ptr_str is :%s\n", ptr_str);

 这下子str[80]定义了一个80个字符的数组。可是打印出来后,是:aaaaaaaa.
也就是说,第三句没有把值改过来。

其实我的问题在于:怎么样定义一个字符串,在程序的运行中间能修改值。
 我在第二行定义了一个 *ptr_str,指望它能在运行中被修改,就是主贴的第四步。但是不行,所以引入了一个str[80]的字符串数组,现在看来我还是不行。唯一能做的,是第一步。
忘了说一句,我用的是VC++,6.0版的。
 小萝卜刚学C,才疏学浅,还望各位赐教。
 谢谢啦。

跟你说了str[80]="bbbbbbbbb";这样赋值不行了
怎么样定义一个字符串,在程序的运行中间能修改值。
定义一个字符串char str[80]="aaaaaaaaa";或char *str = "aaaaaaaaa"都是对的
但是前一种定义之后可以更改 后一种定义就不能修改了

修改的时候可以一个一个字符元素赋值,可以strcpy

#include "stdio.h"
#include "conio.h"
#include "string.h"

int main()
{
char str[80]="aaaaaaaaa";
char *ptr_str;

// str[80]="bbbbbbbbb";
ptr_str= str;
printf("Now ptr_str is :%s\n", ptr_str);

char* pNew = "bbbbbbbb";
strcpy(str,pNew);//复制的方法修改
printf("Now ptr_str is :%s\n", ptr_str);

//对元素赋值的方法修改
for(unsigned int i = 0; i < strlen(str); ++i) str[i] ++;
printf("Now ptr_str is :%s\n", ptr_str);

return 0;
}





天行健,君子以自强不息!!QQ:68660681
2007-07-29 18:15
南京小萝卜
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-7-29
收藏
得分:0 
谢谢雾都大哥和各位,总算做出来了。
有个问题,关于头文件的。你怎么知道string.h里有什么函数?比如说这个strcyp,我怎么知道它在哪个头文件里?
再次谢谢。
2007-07-30 11:26
快速回复:[求助]一个string的赋值和打印的问题 小萝卜这厢有礼了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025639 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved