函数调用的问题
我是C初学者,请大家给看看下面的程序错在哪
目的:通过程序调用实现修改字符串
#include <stdio.h>
int swap_str(char *s)
{
s="hi";
return 1;
}
int main()
{
char *msg="hello";
printf("%s\n",msg);
swap_str(msg);
printf("%s\n",msg);
return 1;
}
[解决办法]
把char *msg= "hello "; 改成
char msg[] = "hello ";
试试
[解决办法]
用函数传递的只是指针指向值
而指针指向的是字符串常量 不可修改的
所以错误
[解决办法]
swap 函数的参数是个字符指针
对行参直接赋值,函数返回后,实参是不变的
将
int swap_str(char *s)
{
s= "hi ";
return 1;
}
改成
int swap_str(char *s)
{
strcpy(s, "hi"); //这里s的长度大于“hi”,并在开始键入#inluude <string.h>
return 1; //返回值无意义,可以直接定义成无返回值函数
}
[解决办法]
改成char**做参数就可以,就不知道"hi "的生存期有没有问题
另外c++习惯是以return 0;表示正确返回的
[解决办法]
从语法上来说没什么错误,应该可以通过编译,从实现目的上来说,错了!而且是原则性错误!----不过问题不大,给荔枝出来了,自己琢磨一下就可以修改过来!
- C/C++ code
#include <stdio.h> int swap_str(char *s) { s= "hi "; //这里不修改指针所指向的数据,而是把指针改变了指向,即指向了"hi"字符串的地址 return 1; } int main() { char *msg= "hello "; //指针msg指向的是静态数据区的数组,其值不允许修改printf( "%s\n ",msg); swap_str(msg); printf( "%s\n ",msg); return 1; }
[解决办法]
晕,我才写了几句代码,就有这么多人抢先了!
[解决办法]
char *msg= "hello ";
你这样写
一般的编译器会把 "hello " 指定在数据区做为只读数据来处理
既然是只读
当然是不可以修改的了
[解决办法]
msg是指向常量字符串的指针,你不能修改其指向的内容
你可以让其指向另外一个常量字符串
- C/C++ code
#include <stdio.h> void swap_str(char** s){ *s = "hi";} int main() { char* msg= "hello"; printf( "%s\n", msg); swap_str(&msg); printf( "%s\n",msg); return 1; }
[解决办法]
lz 你那修改方法也不对
- C/C++ code
#include <stdio.h> int swap_str(char *s) { strcpy(s,"hi ");return 1; } int main() { static char msg[]= "hello "; printf( "%s\n ",msg); swap_str(&msg); printf( "%s\n ",msg); return 1; }
[解决办法]
不好意思 上面
少写了个*- C/C++ code
#include <stdio.h> int swap_str(char **s) { strcpy(*s,"hi ");return 1; } int main() { static char msg[]= "hello "; printf( "%s\n ",msg); swap_str(&msg); printf( "%s\n ",msg); return 1; }
[解决办法]
这个论坛果然很多高手,谢谢各位。看来我是找对了地方,论坛里的人真热情。ckt1120、ttlyfast两位将分平分了吧
[解决办法]
哎!人情冷暖,世态炎凉阿!--------又被瓜分了!
[解决办法]
只要在你的程序上加一个符号 & 就行了。
#include <stdio.h>
int swap_str(char *&s) //[color=#99CC00][/color]在这加个 & 就 OK 了,哈哈,爽。
{
s= "hi ";
return 1;
}
int main()
{
char *msg= "hello ";
printf( "%s\n ",msg);
swap_str(msg);
printf( "%s\n ",msg);
return 1;
}
[解决办法]
大石头!你给那人发书 抢走100了分逆~~
还不许俺在这赚点小分拉~~
[解决办法]
^_^
闪人!!
[解决办法]
Treazy 不要轻易否定别人的代码……
-------------------------------------------------------
挖! 俺自己否定自己
居然否定错拉
刚发现 见笑拉
这个 是正确滴(俺在9楼发的)
- C/C++ code
#include <stdio.h> int swap_str(char *s) { strcpy(s,"hi ");return 1; } int main() { static char msg[]= "hello "; printf( "%s\n ",msg); swap_str(msg); printf( "%s\n ",msg); return 1; }
[解决办法]
to ttlyfast
-----------------
我以为你在否定我的……ft!
引用3楼
- C/C++ code
int swap_str(char *s) { strcpy(s, "hi "); //这里s的长度大于“hi”,并在开始键入#inluude <string.h> return 1; //返回值无意义,可以直接定义成无返回值函数 }