#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
char *preorden="GEAIBMCLDFKJH";//line 5
上一行错误
char *inorden="IABEGLDCFMKHJ";//line 6
此行中的错误
char *postorden;
此行中的错误
void post(char *pre, char *in, char *pos,int n)
{
int longIzqda;
if(n!=0){
pos[n-1]=pre[0];
longIzqda=strchr(in,pre[0])-in;
post (pre+1,in,pos,longIzqda);
post (pre+1+longIzqda,in+1+longIzqda,pos+longIzqda,n-1-longIzqda);
}
}
int main(int argc,char *argv[])
{
int aux;
aux=strlen(preorden);//convert to string
postorden=(char *)malloc(aux*sizeof(char));//use of malloc function
if (postorden){
printf("The preorden is: %s\n",preorden);
printf("The inorden is: %s\n",inorden);
post(preorden,inorden,postorden,aux);
postorden[aux]='\0';
printf("The postorden calculated is: %s\n",postorden);
free(postorden);
}
else{
fprintf(stderr,"Whithout memory\n");
return 1; // return 1
}
return 0;
}
错误在第5行和第6行 编译器说: 从字符串常量到'char *'[-Wwrite-strings]
的弃用转换答案 0 :(得分:2)
您的代码很少有问题,首先是
char *preorden="GEAIBMCLDFKJH";//line 5
如果在-Wwrite-strings
中使用C
标志进行编译,则强制编译器在下面警告您
不建议从字符串常量转换为'char *' [-Wwrite-strings]
因为字符串文字GEAIBMCLDFKJH
存储在主存储器的只读部分中,即它指向的指针,所以内容是只读,因此不是{ {1}}使用char*
。例如
const char*
和
char *preorden = "GEAIBMCLDFKJH";/* preorden is normal pointer but "GEAIBMCLDFKJH" is read only, hence error */
第二,这里
const char *preorden = "GEAIBMCLDFKJH"; /* const char *ptr means ptr contents is read only */
不需要广播malloc结果,因为 postorden=(char *)malloc(aux*sizeof(char));//use of malloc function
返回类型为malloc()
,它会自动安全地提升为任何其他指针类型,即读Do I cast the result of malloc?。例如
void*
也在这里(这是关于下面一行的错误评论,请不要介意)
postorden = malloc(aux * sizeof(*postorden));//use of malloc function
aux=strlen(preorden);//convert to string
返回由strlen(preorden)
指向的字符串长度,并被分配给preorden
,而不是注释中所写(转换为字符串)。
然后将aux
的定义更改为
post()
答案 1 :(得分:1)
出现消息“不建议将其从字符串常量转换为'char *'[-Wwrite-strings]”是因为该代码被编译为C ++代码,该代码对于从C转换字符串文字和指针具有不同的规则。
这可以通过将代码编译为C代码来解决,也可以通过在char *
上插入显式强制转换来解决。