[英]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;
}
上面的代碼有什么問題?
一堆小東西:
您正在將&abc
傳遞給getStr()
。 &abc
是指向保存字符串的變量的指針。 它的類型是指向指針的指針,並且與getStr()的char *str
參數不兼容。
您的getStr()
在使用后定義。 您可能需要之前,它的定義移動到main()
或前加一個原型main()
字符串文字如"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;
}
以下是舊問題的列表:
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.