在另一个函数中分配字符串(char *)

时间:2016-04-05 22:02:49

标签: c malloc

我如何(m)在另一个函数中分配字符串?我已经尝试过两种方式(在代码中只是示例 - 我不会用argv来实现)。

void someFunction(char* string, char** argv) {
    string = (char*)malloc(strlen(argv[2]) + 1);
    strcpy(string,argv[2]);
    // string[strlen(argv[2]) + 1] = '\0' //should I do this now?
    printf("%s",string); //outputs string (works fine)
}

int main(int argc, char** argv) {
    char *string; 
    char *string2;

    someFunction(string,argv);
    printf("%s",string); //outputs (null)
    free(string);

    someFunction(&*string2,argv);
    printf("%s",string2); //outputs (null)
    free(string2);
}

我想在main中使用“string”,但是在不同的函数中使用mallocate。

谢谢!

2 个答案:

答案 0 :(得分:5)

以下是两个例子:

#include <stdio.h>
#include <string.h>
#include <malloc.h>

void alloc1 (char **new_string, char *text) {
  *new_string = malloc(strlen(text)+1);
  strcpy (*new_string, text);
}

char * alloc2(char *text) {

  char *new_string = malloc(strlen(text)+1);
  strcpy (new_string, text);
  return new_string;
}

int
main (int argc, char *argv[]) {
  char *s;

  /* Make sure we entered a command line argument */
  if (argc < 2) {
    printf ("USAGE: myprog SOMETHING\n");
    return 1;
  }

  alloc1(&s, argv[1]);
  printf ("alloc1: s=%s\n", s);
  free (s);

  s = alloc2 (argv[1]);
  printf ("alloc2: s=%s\n", s);
  free (s);

  return 0;
}

第一个示例传递指向指针的指针:main指定指针;函数将空间分配给指针;指针本身是passed by reference

第二个例子是类似的,除了函数返回指针而不是改变引用。

如果你只是初始化一个指针,第一个是“更干净”;如果你想在同一个函数中返回多个不同的值,第二个很有用。

答案 1 :(得分:2)

你想要这个:

$query = "SELECT id, name, creator, LENGTH(content) AS size FROM upload";