0

我对 C 指针有误解:

void putString(char* StringPtr, int length){
  for(int i=0; i< length; i++)       
  {                   
    USART_send(*StringPtr);      
    StringPtr++;
  }
}

void parseMsg(char* in_string, int str_len) {
  int i = 0;
  putString(in_string, str_len);
  for(i = 0; i <= str_len; i++) 
  {
    char* temp_pt = &in_string[i];
    putString(temp_pt, 1);
  }
}

int main(int arg) {
  char* myChar = "abcdefg";
  parseMsg(myChar, 7);
}

编辑:parseMsg,当我打电话给第一个时putString,它工作得很好。当我尝试循环单独打印每一个时,它没有。USART_send只是将字符吐到我的终端。

4

2 回答 2

3

那是因为test[i]is 属于 typechar而不是 type char *

您可以分配给 char:

 char temp = test[i];

或获取其地址:

 char *temp = &test[i];
于 2013-03-30T18:21:09.053 回答
0

你的线路char* temp = test[i];错了。它创建一个名为 temp 的指针,并使其指向255计算机内存中字节 0 和字节之间的某个地址。这几乎可以肯定是一件非常糟糕的事情。您可能指的是 char temp = test[i];,它创建了一个名为 temp 的 char 并为其分配test[i]. 另请注意,test[2]这也是无效的,因为myChar它是一个只有 1 个字符加上null终止符的字符串。

于 2013-03-30T18:29:30.670 回答