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

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

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語言中的問題,幾個C語言中的問題???

是二進位制位運算,意思是按位求與 假設i 5 二進位制就是101 i 1 就是 101 001 結果001 i 2 就是101 010 結果是000 i 4 就是 101 100 結果是 100 if i 4 的意思是 如果i的二進位制的第三位為1那判斷結果就是真,比如對於i 4,5,6,7 i 4...

c語言中的函式呼叫

include int fun1 int x,int y,int z int fun2 int x,int y,int z int main void int fun1 int x,int y,int z int fun2 int x,int y,int z 你要使用,你寫的函式求出的值,那就要有個...