如何使用strcpy将字符串复制到char数组中

时间:2014-09-19 18:17:05

标签: c++ c string arduino

我尝试将值复制到char中。

我的char数组是

char sms_phone_number[15];

顺便说一句,可以告诉我是否应该写(有什么好处/差异?)

char * sms_phone_number[15]

下面显示一个字符串:" + 417611142356"

splitedString[1]

我想把这个值赋给sms_from_number

// strcpy(sms_from_number,splitedString[1]);   // OP's statement 
strcpy(sms_phone_number,splitedString[1]);  // edit 

我有错误,我认为因为splitedString [1]是一个字符串,不是吗?

  

sim908_cooking:835:错误:来自' char'的无效转换到' char *'

那么我怎样才能正确地复制它。 我也试过sprintf但没有成功。

非常感谢你的帮助。 干杯

3 个答案:

答案 0 :(得分:0)

我声明像这样的spliedString

// SlitString
#define NBVALS 9
char *splitedString[NBVALS];

我有这个功能 splitString(" TOTO,+ 345,蒂蒂",slitedString)

void splitString(char *ligne, char **splitedString)
{

  char *p = ligne;

  int i = 0;
  splitedString[i++] = p;
  while (*p) {


    if (*p==',') {
      *p++ = '\0';
      if (i<NBVALS){
         splitedString[i++] = p;
      }
    } 
    else
    {
      p++;
    }

  }
  while(i<NBVALS){
    splitedString[i++] = p; 
  }
}

如果我使用splitedString显示执行for,则显示此

for(int i=0;i<4;i++){
Serialprint(i);Serial.print(":");Serial.println(splitedString[i]);
}

//0:toto
//1:+4176112233
//2:14/09/19

我也声明并想要复制..

char sms_who[15];
char sms_phone_number[15];
char sms_data[15];
//and I want to copy 
strcpy(sms_who,splitedString[0]
strcpy(sms_phone_number,splitedString[1]
strcpy(sms_date,splitedString[2]

我知道,我对char和指针*非常困惑:o(

答案 1 :(得分:0)

宣言:

  char * SplittedString[15];

声明一个指针数组到字符,a.k.a。C风格的字符串。

假设:

  const char phone1[] = "(555) 853-1212";
  const char phone2[] = "(818) 161-0000";
  const char phone3[] = "+01242648883";

您可以将它们分配到SplittedString数组:

  SplittedString[0] = phone1;
  SplittedString[1] = phone2;
  SplittedString[2] = phone3;

为了帮助您,上述作业应该是:

  SplittedString[0] = &phone1[0];
  SplittedString[1] = &phone2[0];
  SplittedString[2] = &phone3[0];

通过定义SplittedStrings数组包含指向单个字符的指针,因此最后一组赋值是正确的版本。

如果您被允许,请将std::string更改为char *,将std::vector更改为数组。

需要的是一个字符串向量:

std::vector<std::string> SplittedStrings(15);

修改1:

提醒:为spliedString分配空间。

您的spliedString应该是预先分配的数组:

  char spliedString[256];  

或动态分配的字符串:

  char *spliedString = new char [256];

答案 2 :(得分:0)

字符串和字符对于菜鸟来说可能会造成混乱,特别是如果您使用了其他更灵活的语言。

char msg[40];  // creates an array 40 long that can contains characters
msg = 'a';     // this gives an error as 'a' is not 40 characters long 
(void) strcpy(msg, "a");              // but is fine : "a"
(void) strcat(msg, "b");              // and this    : "ab"
(void) sprintf(msg,"%s%c",msg, 'c');  // and this    : "abc"

HTH