我如何(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。
谢谢!
答案 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";