簡體   English   中英

如何將char分配給數組?

[英]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);

題:

  1. 如何為tempStr分配str char
  2. 如何在函數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 );

而鮑勃是你的叔叔。

您應該使用memcpystrcpy (如果它是一個以空字符結尾的字符串)。

在這個例子中,沒有定義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.

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