簡體   English   中英

c將字符串傳遞給函數,然后返回字符串

[英]c pass a string to function then return a string

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *abc = "abc";
    char *new_str;
    new_str = getStr(&abc);
    printf("%s", abc);
}

char *getStr(char *str)
{
    printf(str);
    return str;
}

上面的代碼有什么問題?

一堆小東西:

  1. 您正在將&abc傳遞給getStr() &abc是指向保存字符串的變量的指針。 它的類型是指向指針的指針,並且與getStr()的char *str參數不兼容。

  2. 您的getStr()在使用后定義。 您可能需要之前,它的定義移動到main()或前加一個原型main()

  3. 字符串文字如"abc"const char * 您正在定義類型為char *的變量,該變量是可疑的(因為它將允許您修改字符串文字,但不允許這樣做)。

這是一個工作版本:

#include <stdio.h>
#include <stdlib.h>

char *getStr(char *str);

int main(void)
{
    char *abc = "abc";
    char *new_str;
    new_str = getStr(abc);
 //printf("%s", *abc); don't really need this
}

char *getStr(char *str) {
 printf("%s", str);
 return str;
}

以下是舊問題的列表:

  1. 沒有函數getStr的原型。
  2. 您無法執行printf(str),而需要“%s”作為附加參數。
  3. 您需要更改:new_str = getStr(&abc)更改為new_str = getStr(abc)

AC字符串是指向一個字符的指針,該字符以一個以空字節結尾的字符序列開頭。 變量abc完全符合此定義。

另外,abc是指向字符的指針。 您正在傳遞abc的地址,即getStr將接收指向字符的指針的地址-因此getStr的唯一參數應為指向字符的指針的類型。 類型不匹配。

編輯:此外,getStr在聲明之前被調用。 您的編譯器可能允許這樣做,但是出於許多原因,這是一種不好的做法。 您應先聲明或定義它,然后再使用它。 如果您使用gcc作為編譯器,請務必使用

gcc -ansi -Wall -pedantic

這三個標志將符合ANSI標准,並且可能因上述問題而大吼大叫或無法編譯。

您的getStr函數帶有一個char *,但這不是您要傳遞的內容-您傳遞的是指針的地址,而不是實際的指針。

更改:

new_str = getStr(&abc);

至:

new_str = getStr(abc);

而且我認為它會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM