C指针和调用方法?
我是C新手,很难理解如何用指针调用方法。目前,这段代码应该反转以null结尾的字符串,但我得到了错误C指针和调用方法?,c,pointers,C,Pointers,我是C新手,很难理解如何用指针调用方法。目前,这段代码应该反转以null结尾的字符串,但我得到了错误 main.c:8:12:错误:使用未声明的标识符“sas” char*N=sas; ^main.c:10:10:警告:将“char”传递给类型的参数的整数到指针转换不兼容 “char*”;删除*[-Wint转换] 反向(*N); ^~./header.h:3:27:注意:将参数传递到参数'N'此处外部无效反转(char*N); 我的实际代码是: 主要内容: #包括 #包括 #包括“head
main.c:8:12:错误:使用未声明的标识符“sas”
char*N=sas;
^main.c:10:10:警告:将“char”传递给类型的参数的整数到指针转换不兼容
“char*”;删除*[-Wint转换]
反向(*N);
^~./header.h:3:27:注意:将参数传递到参数'N'此处外部无效反转(char*N);
我的实际代码是:
主要内容:
#包括
#包括
#包括“header.h”
int main(int argc,char*argv[])
{
char*N=sas;
反向(*N);
}
反向:
#包括
#包括“header.h
#包括
无效反向(字符*str)
{
char*end=str;
焦炭温度;
printf(“这是*str:%c\n”,*str);
如果(str)
{
while(*结束)
{
++完:
}
结束--;
while(str
标题h:
#定义外部
外部无效反转(字符*N)
感谢您的帮助和时间!据我所知,您正在尝试反转字符串。这只是对您的代码的一个轻微修改 完整资料来源:
#include <stdio.h>
#include <stdlib.h>
void reverse(char *N);
int main(int argc, char *argv[])
{
char strSas[] = "sas";
reverse(strSas);
}
void reverse(char *str)
{
char* end = str;
char temp;
if(str) {
printf("this is *str: %c\n", *str);
while(*end) {
++end;
}
end--;
while(str < end) {
temp = *str;
*str = *end;
*end = temp;
++str;
--end;
}
}
}
#包括
#包括
无效反向(字符*N);
int main(int argc,char*argv[])
{
字符strSas[]=“sas”;
反向(STRAS);
}
无效反向(字符*str)
{
char*end=str;
焦炭温度;
如果(str){
printf(“这是*str:%c\n”,*str);
while(*结束){
++结束;
}
结束--;
而(str
首先,这段代码中有许多语法错误:
char* N = "sas";
首先将
N
指向字符串常量。然后尝试反转N
指向的内容。但是由于N
指向字符串常量,因此尝试反转字符串常量。根据定义,常量的值不能更改。1。请选择更好的编码样式,这种样式很难使用下面,2.什么是sas
?你想做什么?3.你的代码有几个不编译的原因,例如你有++end:
??和许多显然不需要的大括号,尽管我怀疑你可能遗漏了代码。你可能需要char*N=“sas”
(一个字符串),您应该调用reverse(N)
。然后您将崩溃,因为字符串不可修改。因此,实际上,您需要char N[]=“sas”
。当然,很难发现原始字符串和反转字符串之间的差异。您可能应该使用char N[]=“xyz”进行测试";代码>或其他非对称的东西。在reverse()中打印时,
将打印单个字符,而不是整个字符串。您也应该在main()
中打印“after”字符串。否则,您将不知道代码是否进行了正确的更改。reverse()
没有阻塞。请发布完整的代码,精简到相关部分。对不起,我正在编写一本采访手册,这是他们的代码——除了主要方法之外——所以相反的方法就是整个方法。我只是不知道该怎么称呼这个东西。很抱歉,我的代码写得很糟糕,但我是C语言的外国人。reverse(*N)
的可能重复项不会编译,因为reverse()
需要一个char*
。请注意,尝试反转字符串文字(常量字符串)可能会崩溃。reverse(“sas”)
是错误的。字符串文字是只读的。另外,reverse()
计算一个可能超出str
数组范围的指针:对于空字符串,end
将指向str
前面的一个位置,这违反了标准。我并不是试图修复Chris的所有可能的边缘情况。
int main(int argc, char *argv[])
{
char* N = "sas";
reverse(*N);
}