在C中创建变量大小的char数组

时间:2015-11-06 13:39:51

标签: c arrays

我正在尝试接收一个超大的char数组,以便根据变量maxSize

在其中放置分隔符

例如,如果字符串"This is a message"maxSize 4一起传递给函数,则输出应为"This, is ,a me,ssag,e"

char *placeDelimiter(char message[], int maxSize) {
  int msgSize = strlen(message);
  int delSize = (msgSize/maxSize);
  int remSize = msgSize%maxSize;
  int newSize = msgSize+delSize;
  if (remSize==0) delSize--; //removes delimiter if on end of char array
  char temp[newSize];
  int delPos = 0;
  for (int x=0;x<msgSize;x++) {
    if ((x+1)%maxSize == 0) temp[x] = ',';
    temp[x+delPos] = message[x];
    delPos = (x+1)/maxSize;
  } 
  return (char *)temp;
}

int main()
{
    char msg[] = "This is a message";
    char *p;
    p = placeDelimiter(msg, 4);
    printf("%s", p);
    return 0;
}

我的问题是我从输入"This i,"(来自在线编译器)获取输出"This is a message"。任何人都可以向我解释我做错了什么以及如何解决它?

1 个答案:

答案 0 :(得分:1)

char temp[newSize];是函数placeDelimiter()的局部变量。函数返回后访问它是Undefined behavior。

您应该使用动态内存分配。

char* temp = malloc(newSize);