亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 4557 | 回復: 15
打印 上一主題 下一主題

[函數(shù)] printf函數(shù)中重復調(diào)用自定義函數(shù)出錯.請幫忙看一下. [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2004-04-21 07:37 |只看該作者 |倒序瀏覽
我把substr()改成如下(substr()為取子字符串函數(shù)).還是不行.


  1. #include <stdio.h>;
  2. #include <stdlib.h>;

  3. char * substr();

  4. main()
  5. {
  6.         static        char        AAA[]="12345678";
  7.         static        char        BBB[]="654321";
  8.         static        char        CCC[]="1x2x3x4x5x6x7x8x9xAxBx";
  9.         static        char        DDD[]="美國好萊塢市奧斯卡街二十九號";

  10. printf("|%4s|",substr(AAA,0,4));
  11. printf("%6s|",substr(BBB,0,6));
  12. printf("%13s|",substr(CCC,0,13));
  13. printf("%18s|\n",substr(DDD,0,18));

  14. printf("|%4s|%6s|%13s|%18s|\n",substr(AAA,0,4),substr(BBB,0,6),substr(CCC,0,13),substr(DDD,0,18) );

  15. }

  16. char * substr(char *source_string, int start_pos, int target_string_len)
  17. {
  18.         char        target_string[81];

  19. //        memset(target_string,0x0,sizeof(target_string));

  20.         strncpy(target_string,source_string,target_string_len);

  21.         return (target_string);
  22. }
復制代碼


前面4個printf運行正常.

論壇徽章:
0
2 [報告]
發(fā)表于 2004-04-21 08:39 |只看該作者

printf函數(shù)中重復調(diào)用自定義函數(shù)出錯.請幫忙看一下.

target_string 定義為了局部變量,定義成全局變量試試

論壇徽章:
0
3 [報告]
發(fā)表于 2004-04-21 08:44 |只看該作者

printf函數(shù)中重復調(diào)用自定義函數(shù)出錯.請幫忙看一下.

$ gcc printf.c
printf.c:30: warning: function returns address of local variable

這個警告信息就是關鍵所在.

論壇徽章:
0
4 [報告]
發(fā)表于 2004-04-21 09:34 |只看該作者

printf函數(shù)中重復調(diào)用自定義函數(shù)出錯.請幫忙看一下.

你的程序有兩個問題:
1.substr函數(shù)的返回有問題,target_string是局部變量,不能返回。
2.即使你把target_string改成全局或靜態(tài),第5個printf依然不行,因為printf只會打印出最后一次substr的結(jié)果,不是你想要的,這部分你還要好好看看書。

要達到你的要求,可以把第五個printf的format改一下。

論壇徽章:
0
5 [報告]
發(fā)表于 2004-04-21 17:37 |只看該作者

printf函數(shù)中重復調(diào)用自定義函數(shù)出錯.請幫忙看一下.

那我暫時一個一個printf好了,因為這樣它工作得很好-雖然target_string是局部變量,但它也正確返回了.(sco openserver5.0.x / 自帶的開發(fā)系統(tǒng))
這是我的取子字符串函數(shù)-substr():


  1. #include <stdio.h>;
  2. #include <stdlib.h>;

  3. char * substr();

  4. main()
  5. {
  6.         .
  7.         .
  8.         .
  9. }


  10. char * substr(char *source_string, int start_pos, int target_string_len)
  11. {
  12.         int        source_string_len,i;
  13.         char        target_string[81];

  14.         source_string_len=strlen(source_string);

  15.         i=0;       
  16.         if ( source_string_len >; start_pos && target_string_len < 81 )
  17.         {

  18.                 for ( i=0; i < target_string_len && source_string[start_pos+i] != '\0' ; i++ )
  19.                         target_string[i]=source_string[start_pos+i];
  20.         }
  21.         target_string[i]='\0';

  22.         return (target_string);
  23. }
復制代碼

論壇徽章:
0
6 [報告]
發(fā)表于 2004-04-21 17:48 |只看該作者

printf函數(shù)中重復調(diào)用自定義函數(shù)出錯.請幫忙看一下.

有潛在危險哦,避免危險的方法是把target_string定義成static。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
7 [報告]
發(fā)表于 2004-04-21 17:49 |只看該作者

printf函數(shù)中重復調(diào)用自定義函數(shù)出錯.請幫忙看一下.

[quote]原帖由 "duleell"]雖然target_string是局部變量,但它也正確返回了[/quote 發(fā)表:

你等著吧!有你吃苦頭的時候。

論壇徽章:
0
8 [報告]
發(fā)表于 2004-04-21 18:02 |只看該作者

printf函數(shù)中重復調(diào)用自定義函數(shù)出錯.請幫忙看一下.

原帖由 "flw" 發(fā)表:

你等著吧!有你吃苦頭的時候。


呵呵,嚴重同意!

論壇徽章:
0
9 [報告]
發(fā)表于 2004-04-21 18:51 |只看該作者

printf函數(shù)中重復調(diào)用自定義函數(shù)出錯.請幫忙看一下.

真的?
其實它返回的是target_string在內(nèi)存中的地址,有什么不對嗎?

論壇徽章:
0
10 [報告]
發(fā)表于 2004-04-21 20:23 |只看該作者

printf函數(shù)中重復調(diào)用自定義函數(shù)出錯.請幫忙看一下.

建議看書,看看函數(shù)能夠返回什么類型變量的地址。
其實FH已經(jīng)說得很清楚了。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP