如何将char分配给数组?

时间:2011-03-09 07:32:45

标签: c

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. 如何将str char分配给tempStr
  2. 如何在功能str中将tempStr替换为compress?我认为str = tempStr错了
  3. 感谢

4 个答案:

答案 0 :(得分:1)

1.您的代码未命中tempStr defination,如 char tempStr [LENGTH] ,请确保 LENGTH 足够大。 2.C字符串应该以'\ 0'结尾,所以你需要在循环后设置tempStr [j] ='\ 0'(我认为这是遗漏的)。然后你可以使用strcpy copy tempStr to str。

答案 1 :(得分:1)

看起来你对字符串,数组和指针有点困惑。

char str[] = "abc abc abc 123";表示内存中的某个地方有一个包含这些字符的数组。当声明时,'str'是常量,不能设置为指向其他地方。

相反,你需要分配每个单独的角色,这是你开始做的事情 在函数中使用语句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 );

鲍勃是你的叔叔。

答案 2 :(得分:0)

您应该使用memcpystrcpy(如果它是以空字符结尾的字符串)。

在示例中,tempStr未定义,因此我猜测它是char的数组。虽然,你可能需要一个循环......

答案 3 :(得分:0)

 char tempStr [256];

tempStr是一个可以容纳256个字符的字符数组。

但是这句话会发生什么 - str = tempStr;

当你说tempStr时,得到的是指向数组第一个元素的指针(即&amp; tempStr [0])。因此,使用该语句您实际上并未将tempStr的元素复制到str。 rvalue的类型为char*,但左值的类型为char [],它们不兼容并导致编译错误。

要实际复制数组的元素,您应该使用strcpy