#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[]="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语言对字符串的赋值是一个一个字符赋值而得的
不能直接赋值
----------------解决方案--------------------------------------------------------
只有初始化时,才可以直接一起赋值。
----------------解决方案--------------------------------------------------------
谢了,雾都大哥。
我改了一下:
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,我怎么知道它在哪个头文件里?
再次谢谢。
----------------解决方案--------------------------------------------------------