当前位置: 代码迷 >> C语言 >> [求助]一个string的赋值和打印的问题 小萝卜这厢有礼了
  详细解决方案

[求助]一个string的赋值和打印的问题 小萝卜这厢有礼了

热度:209   发布时间:2007-07-29 14:59:30.0
[求助]一个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  

----------------解决方案--------------------------------------------------------
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编辑过]


----------------解决方案--------------------------------------------------------
 谢了,雾都大哥。

我改了一下:
 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,才疏学浅,还望各位赐教。
 谢谢啦。

----------------解决方案--------------------------------------------------------
for(i = 0;i < strlen(str);++i)
ptr_str[i] = str[i] ;
C语言对字符串的赋值是一个一个字符赋值而得的
不能直接赋值
----------------解决方案--------------------------------------------------------
只有初始化时,才可以直接一起赋值。
----------------解决方案--------------------------------------------------------
以下是引用南京小萝卜在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;
}





----------------解决方案--------------------------------------------------------
谢谢雾都大哥和各位,总算做出来了。
有个问题,关于头文件的。你怎么知道string.h里有什么函数?比如说这个strcyp,我怎么知道它在哪个头文件里?
再次谢谢。

----------------解决方案--------------------------------------------------------
  相关解决方案