一道新手入门题把我难住了

时间:2021-04-05 20:09:24
/*要将“China”译成密码,密码规律是:
用原来的字母后面第4个字母代替原来的字母。例如,字母“A”后面的第4个字母是“E”,用“E”代替“A”。
因此,“China”应译为“Glmre”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为‘C’、
‘h’、‘i’、‘n’‘a’,经过运算,
使c1、c2、c3、c4、c5分别变为‘G’、‘l’、‘m’、‘r’、‘e’,并输出。
*/

#include <stdio.h>
#include <string.h>
 void main()
{
   char * GeneratePwd(char *);
   char * OldChars="China";
   printf("老字符串是%s\n",OldChars);
   printf("老字符串的长度是%d\n",strlen(OldChars));
   printf("新字符串是%s\n",GeneratePwd(OldChars));//执行到这里出错,说不能写入
     

return ;
}

 char * GeneratePwd(char * aa)
{
char *string =aa;

while(*string)
{

*string=(*string)+4;//断点停在这里。说*string不能写入
string++;
}
*string=NULL;

   
return aa;
}

9 个解决方案

#1


char * OldChars="China";
==============>改成
char OldChars[]="China";

#2


char * OldChars="China"; //"China";存储在静态区域,不可以修改,所以下面的函数修改了字符串内容是不允许的。

#3


谭浩强居然没有说,真是的,哎。

#4


char* c1="abcdefg";
char   c2[]="abcdefg";
c1是一个指向的字符串常量(只读的)的指针,
c2则是一个字符数组的地址,所以可以通过*(c2+i)来改变第二个数组得值。

#5


源代码是没有什么问题,楼主你关键的是没有把字符串指针的用法没有弄清楚它的正确用法!
好运~~~~~
===============================================================================
鉴定完毕!

#6


用原来的字母后面第4个字母代替原来的字母,要求密文也是字母么?
那么‘{’‘}’......是不是就不算字母了呢?

#7


把char * OldChars="China";改成char OldChars[]="China";另外把*string=NULL改为string=NULL

#8


mark

#9


题外话:
1.为什么不写 *string += 4;
2.*string=NULL;多余

#1


char * OldChars="China";
==============>改成
char OldChars[]="China";

#2


char * OldChars="China"; //"China";存储在静态区域,不可以修改,所以下面的函数修改了字符串内容是不允许的。

#3


谭浩强居然没有说,真是的,哎。

#4


char* c1="abcdefg";
char   c2[]="abcdefg";
c1是一个指向的字符串常量(只读的)的指针,
c2则是一个字符数组的地址,所以可以通过*(c2+i)来改变第二个数组得值。

#5


源代码是没有什么问题,楼主你关键的是没有把字符串指针的用法没有弄清楚它的正确用法!
好运~~~~~
===============================================================================
鉴定完毕!

#6


用原来的字母后面第4个字母代替原来的字母,要求密文也是字母么?
那么‘{’‘}’......是不是就不算字母了呢?

#7


把char * OldChars="China";改成char OldChars[]="China";另外把*string=NULL改为string=NULL

#8


mark

#9


题外话:
1.为什么不写 *string += 4;
2.*string=NULL;多余