我已經嘗試了很多方法來做到這一點,但我無法讓它發揮作用。我的設定說要使用 char[] 但我研究過的所有東西都沒有關于使用它的資訊。這是我下面的代碼
#include <stdio.h>
#include <string.h>
char[] makeString(char character,int count)
{
char finalString[count];
strcpy(finalString,character);
for(int i=1;i<=count;i )
{
strcat(finalString,character);
}
return finalString;
}
int main() {
printf("%s\n",makeString("*",5)); }
我正在嘗試創建一個函式,該函式回傳給定字符計數次數的字串。任何幫助是極大的贊賞。
如果這是一個非常簡單的錯誤,我深表歉意,我主要用 python 撰寫代碼,所以 C 對我來說很新。
uj5u.com熱心網友回復:
有幾個問題,主要是char finalString[count];
finalString是在函式內部創建的變數,稱為區域變數。它會在函式回傳后被銷毀。count因為count變數的值是動態變化的。它的值在編譯階段無法確定,因此編譯器無法為該陣列分配記憶體空間。編譯會失敗。
要解決這個問題。
要么在外部創建此變數并將其傳遞給函式。
HEAP或者在空間上創建變數。由于Heap space它們在整個程式中共享,因此不受函式結束的影響。使用常量或動態分配一塊記憶體
malloc,calloc等等。
這是一個包含完整代碼的演示:
// main.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* makeString(char character,int count) {
char* finalString = malloc(count 1); //dynamic allocate a chunk of space. 1 for mimic string end with an extra termination sign 0.
for(int i=0; i<count; i ) {
finalString[i] = character;
}
finalString[count] = 0; // string end signal 0
return finalString; // the memory finalString pointed to is in the HEAP space.
}
int main() {
char * p = makeString('*',5);
printf("%s\n",p);
free(p); // free up the HEAP space
return 0;
}
編譯和運行代碼。
gcc -Wall main.c ./a.out輸出
*****
uj5u.com熱心網友回復:
陣列不是 C 中的一等型別——你可以用其他型別做很多你不能用陣列做的事情。特別是您不能將陣列作為引數傳遞給函式或回傳一個作為回傳值。
由于這個限制,如果您曾經為引數或回傳型別宣告了具有陣列型別的函式,編譯器將(默默地)將其更改為指標,并且您實際上將傳遞或回傳指標。這就是這里發生的事情 - 回傳型別更改為char *,并且您回傳一個指向超出范圍的本地陣列的指標,因此您最終得到的指標是懸空的。
uj5u.com熱心網友回復:
您的代碼無法編譯。如果你想回傳一個陣列,你char *不會char []。函式回傳后,區域變數如finalString超出范圍。
這里有3種方法:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *initString(char *a, char c, int n) {
memset(a, c, n);
a[n] = '\0';
return a;
}
char *makeString(char c, int n) {
char *a = malloc(n 1);
memset(a, c, n);
a[n] = '\0';
return a;
}
int main(void) {
printf("%s\n", memset((char [6]) { 0 }, '*', 5));
char s[6];
initString(s, '*', (sizeof s / sizeof *s) - 1);
printf("%s\n", s);
char *s2 = makeString('*', 5);
printf("%s\n", s2);
free(s2);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514926.html
標籤:数组C功能字符
