读书人

函数调用的有关问题

发布时间: 2012-03-19 22:03:05 作者: rapoo

函数调用的问题
我是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;   //返回值无意义,可以直接定义成无返回值函数 } 

读书人网 >C语言

热点推荐