[英]how to assign a char to array?
int compress(char str[]) {
char tempStr [256];
int i,j, counter=0;
if (!isdigit(str[i]) && (!isspace(str[i]))) {
tempStr[j] = str[i];
j++;
printf("%c", tempStr[i]);
} else {
counter++;
}
str = tempStr;
}
char str[] = "abc abc abc 123";
result = compress(&str);
題:
tempStr
分配str
char
? compress
tempStr
str
替換為tempStr
? 我認為str = tempStr
是錯誤的 謝謝
1.你的代碼錯過tempStr defination,就像char tempStr [LENGTH]一樣 ,確保LENGTH足夠大。 2.C字符串應該以'\\ 0'結尾,所以你需要在循環后設置tempStr [j] ='\\ 0'(我認為這是遺漏的)。 然后你可以使用strcpy copy tempStr來str。
看起來你對字符串,數組和指針有點困惑。
char str[] = "abc abc abc 123";
意味着在內存中的某個地方你有一個包含這些字符的數組。 當聲明時,'str'是常量,不能設置為指向其他地方。
相反,您需要使用語句tempStr[j] = str[i]:
分配每個單獨的字符,這是您在函數中開始執行的操作tempStr[j] = str[i]:
你需要循環遍歷str中的字符並檢查每個字符,然后將char分配給tempStr,tempStr應至少與原始str []數組一樣大。
就像是
char *tempStr = calloc( strlen( str ) + 1, 1 ); // allocates a buffer +1 char for \0
for (int i = 0, j = 0; i < strlen( str ); ++i)
{
if (!isdigit(str[i]) && (!isspace(str[i])))
{
tempStr[j++] = str[i];
printf("%c", str[i]);
}
}
現在你已經從str []中刪除了一些字符,但是你現在需要將tempStr的內容移回str,這可以用strcpy來完成:
strcpy( str, tempStr );
然后釋放緩沖區
free( tempStr );
而鮑勃是你的叔叔。
您應該使用memcpy
或strcpy
(如果它是一個以空字符結尾的字符串)。
在這個例子中,沒有定義tempStr
,所以我猜它是一個char
數組。 雖然,你可能需要一個循環...
char tempStr [256];
tempStr
是一個可以容納256個字符的字符數組。
但是這個語句會發生什么 - str = tempStr;
?
當你說, tempStr
,你得到的是指向數組的第一個元素的指針(即&tempStr [0])。 因此,使用該語句實際上並不是將tempStr
的元素復制到str
。 rvalue的類型為char*
但是lvalue的類型為char []
,它們不兼容並導致編譯錯誤。
要實際復制數組的元素,您應該使用strcpy
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.