如何解决如果在函数中将字符串的名称指定为参数,则代码可以正常工作,但在将字符串本身作为参数时,则会产生错误
#include<stdio.h>
int main(void)
{
char str1[10]="Versace";
int length(char *p);
char* reverse(char *p);
printf("Length of the array is %d\n",length("Versace"));
printf("Reversed string %s",reverse("Versace"));
}
int length(char*p)
{
int i;
for(i=0;*(p+i)!='\0';i++);
return i;
}
char* reverse(char *p)
{
int i,l;
char temp;
for(l=0;*(p+l)!='\0';L++);
for (i=0;i<(l/2);i++)
{
temp=*(p+i);
*(p+i)=*(p+l-1-i);
*(p+l-1-i)=temp;
}
return(p);
}
我写了一段代码来查找字符串的长度并反转字符串。为此,我制作了2个函数reverse和length。 但是,为什么此代码显示错误?如果我在第二个printf中使用str1作为反向函数的参数,则代码可以正常工作。
解决方法
compiler warning -Wwrite-strings
提供了一个线索。
test.c:9:49: warning: passing 'const char [8]' to parameter of type 'char *' discards qualifiers
[-Wincompatible-pointer-types-discards-qualifiers]
printf("Length of the array is %d\n",length("Versace"));
"Versace"
存储在可执行文件本身中,该可执行文件本身被映射为只读存储器。如果在编辑器中查看可执行文件,您会发现Versace杂乱无章。它是只读的,您正在尝试对其进行修改。
如果我们进行更改,则警告提示并让reverse
接受const char *
,因为您无法更改常量,因此会出现编译器错误。
test.c:22:16: error: read-only variable is not assignable
*(p+i)=*(p+l-1-i);
~~~~~~^
test.c:23:20: error: read-only variable is not assignable
*(p+l-1-i)=temp;
char str1[]="Versace";
还将"Versace"
存储在可执行文件中,但随后将其复制到可以修改的实存储器中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。