更改数组的长度

时间:2014-05-26 12:27:56

标签: c arrays return

我是C编程的新手,我试图创建一个函数来发送存储在一个数组字符中的内容,每次都会发生变化。所以,如果我的阵列是第一个"你好"它应该只发送5个字符,但如果以后是#34;再见"它应该发送7.如果我想扩展我的数组,我想要避免的是必须编写很多字符,如下所示:

int say (buttonpressed){
  char a[11] = {'h','e','l','l','o'};
  int i;
  for (i = 0;i<12;i++)
  {
    U2TXREG = a[i];
    while(U2STAbits.TRMT==0);
  }
  buttonpressed = 0;
  return 0; 
}

我会赞美任何想法,谢谢!

4 个答案:

答案 0 :(得分:0)

您需要知道数组的长度或使用字符串结束字符(通常为\ x0 - 二进制零)。

答案 1 :(得分:0)

int say (buttonpressed){
  char* a = "hello";
  int i;
  int size=strlen(a);
  for (i = 0;i<size;i++)
  { //rest as before

通过使用字符串常量,您将数组初始化为以null(0)字符结尾。然后可以使用它来使用strlen查找字符串长度。

我还使用了一个指向字符串常量的指针,因为你没有修改它。

答案 2 :(得分:0)

你真的需要解释更多你想做什么。

根据您的说法,我了解您希望在不更改for循环的情况下更改数组的大小和内容。

如果是这样的话,你可以使用它:

#define ARRAY_LENGTH 12 /* 12 is an example */
int say (buttonpressed)
{
    char a[ARRAY_LENGTH] = { . . . . };
    int i;
    for(i =0; i<ARRAY_LENGTH; i++){
       ...
    }
    ....
}

答案 3 :(得分:0)

我会将数据和实际大小存储在结构中(类似于如何在C ++中使用std :: vector

struct vec{
  char data[11];
  unsigned int size;
}

然后在你的for循环中可以从i = 0循环到i

如果你的数组总是一个字符串,那么c风格的字符串在c中就是惯用的。这只是一个由\ 0终止的字符数组,并在循环数组时测试\ 0。