C語言中方法的呼叫問題,C語言中的sprint函式問題

時間 2021-08-11 17:49:46

1樓:

自定義方法如果放在主函式的下面,需要進行函式說明。

解決方法:在主函式上面加上void print();

或者直接將自定義方法拿到主函式上面去,可以避免錯誤。返回值用return語句返回

2樓:匿名使用者

要呼叫沒有返回值型別的方法,你可以給他們設定同型別的引數,就可以呼叫了。。比如:

#include

void max(int a,int b) //宣告函式,並設定引數

void main()

3樓:斯坦恩貝格(北京)電子****

c語言中方法實際就是函式的呼叫。

自定義函式如果放在主函式的下面,需要進行函式說明,即在主函式上面加上函式宣告,或者在主函式上面定義自定義函式,可以避免錯誤。返回值用return語句返回。

4樓:許詩文

定義了一個簡單的函式func1, 呼叫的時候只需要"函式名()" 的方式就可以呼叫的到。(至於呼叫的過程是如何處理的,就要參考彙編的知識了。)

但是,在實際的開發過程中可能會遇到這種情況, 函式名事先並不確定,函式名是通過一個字串變數儲存的,這種狀況該如何呼叫呢?

更具體一點的例子,函式名是通過外部輸入進去了。

該如何執行func1呢?

解決以上問題之前, 首先引入函式指標的概念。

在c語言中,某一資料變數的記憶體地址可以儲存在相應的指標變數中,比如 int * , char * 等,

對於函式來說,也同樣如此,函式的首地址也可以儲存在某個函式指標變數裡,通過這個函式指標變數我們就可以呼叫所指向的函式了。

如何定義函式指標變數? 很簡單。

對應到上面 func1 函式,可以定義如下的指標變數。

void (*funcp)()

funcp這個名字可以隨便取。

/************************

* add by oscar999

************************/

func1()

void main()

有了如上的例子,不難想到:

如果事先定義一些函式指標,通過傳入的函式名字串,得到相應的函式指標,就可以實現函式呼叫了。

[cpp] view plaincopyprint?

/************************

* add by oscar999

************************/

#include

typedef void (*funcp)();

void func1()

void func2()

funcp getfuncpointer(char* sfuncname)

else if(strcmp(sfuncname,"func2")==0)

return null;

} void main()

}/************************

* add by oscar999

************************/

#include

typedef void (*funcp)();

void func1()

void func2()

funcp getfuncpointer(char* sfuncname)

else if(strcmp(sfuncname,"func2")==0)

return null;

}void main()

}你可能會想,通過傳入的string 直接呼叫對應的function不就可以了嗎?類似:

[cpp] view plaincopyprint?

/************************

* add by oscar999

************************/

#include

typedef void (*funcp)();

void func1()

void func2()

void main()

else if(strcmp(c,"func2")==0)

} /************************

* add by oscar999

************************/

#include

typedef void (*funcp)();

void func1()

void func2()

void main()

else if(strcmp(c,"func2")==0)

}以上這種對於 function 較少的狀況可以使用, 但是func很多的話, 或者動態的生成這部分的話,指標函式的方式就很好了。

函式名字串和函式指標放到一個name value set 中去, 這樣就可以很容易得到函式指標了。

5樓:匿名使用者

void main()

不知是樓主表述不清還是我理解能力下降了,你的問題咋這麼難看懂呢?

我的理解,你是說create返回時系統把記憶體收回了,主函式呼叫會記憶體出錯?但是你返回的是指標,系統會保護你已經申請到的記憶體。你再把create返回的指標傳給print,print就可以對你在create申請到的記憶體進行輸出操作了。

不知答對了沒有。。。

c語言中的sprint函式問題

6樓:好程式設計師

sprintf函式原型為 int sprintf(char *str, const char *format, ...)。作用是格式化字串,具體功能如下所示:

(1)將數字變數轉換為字串。

(2)得到整型變數的16進位制和8進位制字串。

(3)連線多個字串。

舉例如下所示:

1     char str[256] = ;

2     int data = 1024;

3     //將data轉換為字串

4     sprintf(str,"%d",data);

5     //獲取data的十六進位制

6     sprintf(str,"0x%x",data);

7     //獲取data的八進位制

8     sprintf(str,"0%o",data);

9     const char *s1 = "hello";

10     const char *s2 = "world";

11     //連線字串s1和s2

12     sprintf(str,"%s %s",s1,s2);

3、sscanf函式

sscanf函式原型為int sscanf(const char *str, const char *format, ...)。將引數str的字串根據引數format字串來轉換並格式化資料,轉換後的結果存於對應的引數內。

具體功能如下:

(1)根據格式從字串中提取資料。如從字串中取出整數、浮點數和字串等。

(2)取指定長度的字串

(3)取到指定字元為止的字串

(4)取僅包含指定字符集的字串

(5)取到指定字符集為止的字串

sscanf可以支援格式字元%:

(1)-: 表示範圍,如:%[1-9]表示只讀取1-9這幾個數字 %[a-z]表示只讀取a-z小寫字母,類似地 %[a-z]只讀取大寫字母

(2)^: 表示不取,如:%[^1]表示讀取除'1'以外的所有字元 %[^/]表示除/以外的所有字元

(3),: 範圍可以用","相連線 如%[1-9,a-z]表示同時取1-9數字和a-z小寫字母

(4)原則:從第一個在指定範圍內的數字開始讀取,到第一個不在範圍內的數字結束%s 可以看成% 的一個特例 %[^ ](注意^後面有一個空格!)

104、snprintf函式

snprintf函式是sprintf函式的更加安全版本,考慮到字串的位元組數,防止了字串溢位。函式形式為:int snprintf(char *restrict buf, size_t n, const char * restrict  format, ...

);。最多從源串中拷貝n-1個字元到目標串中,然後再在後面加一個0。所以如果目標串的大小為n 的話,將不會溢位。

5、測試程式

1 #include

2 #include

3 4 #define ip_str_len     18

5 #define mac_str_len    18

6 #define mac_bit_len    6

7 #define little_endian  0

8 #define big_endian     1

9 10 typedef unsigned char  uchar;

11 typedef unsigned int   uint;

12 13 int big_little_endian()

14 20

21 uint ipstr2int(const char * ipstr)

22 34

35 char *int2ipstr(const uint ip, char *ipstr, const uint ip_str_len)

36 53

55 char *mac2str(const unsigned char *mac,char *mac_str,const uint mac_str_len)

56 62

63 int main()

64 ;

66     char  mac_str[mac_str_len] = ;

67     unsigned char mac[mac_bit_len] = ;

68     const char *ipstr = "10.0.3.193";

69     unsigned int ip;

70     int2ipstr(167773121,ip_str,ip_str_len);

71     mac2str(mac,mac_str,mac_str_len);

72     ip = ipstr2int(ipstr);

73     printf("%s\n",ip_str);

74     printf("%s\n",mac_str);

75     printf("ip:%u\n",ip);

76     return 0;

77 }

程式執行結果如下所示:

c語言中如何函式的多次呼叫,c語言中如何乙個函式的多次呼叫

乙個函式只能有乙個返回值,指標可以返回多個,例如 void aaa int a,c int a,c a a c c a b c b 下面呼叫 a和 c.1.可以使用迴圈語句實現。例如while迴圈語句,計算機的一種基本迴圈模式。當滿足條件時進入迴圈,不滿足跳出。while語句的一般表示式為 whil...

C語言中的sprint函式問題,C語言中迴圈問題

好程式設計師 sprintf函式原型為 int sprintf char str,const char format,作用是格式化字串,具體功能如下所示 1 將數字變數轉換為字串。2 得到整型變數的16進位制和8進位制字串。3 連線多個字串。舉例如下所示 1 char str 256 2 int d...

C語言中的基本運算問題,C語言中的基本運算問題

有些運算操作是要區分有符號與無符號的情況的,比如除法,取模運算其計算語意是不同的,具體來說,有符號的除法在x86平台上對應的彙編指令是idiv,而無符號的除法對應的則是div。而對於另外一些操作運算,則是不區分有符號與無符號的,比如,加法,減法,乘法運算。可以通過以下 測試 int main 雙目運...