此代码将向量(argv)转换为字符串,并打印出来。但是,如果从库 (my_vect2str) 调用 vect2str,则会发出警告:
warning: passing argument 1 of ‘puts’ makes pointer from integer without a cast
运行时出现段错误。这里的函数 vect2str 与库中的函数 (my_vect2str) 完全相同。该库是在同一台计算机上编译的。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "../lib/my.h"
char *vect2str(char **str) {
if (str == NULL)
return NULL;
if (*str == NULL)
return NULL;
int num = 0;
char * a;
int i;
for(i = 0; str[i] != '\0'; )
num += strlen(str[i++]);
num += i;
a = (char *) xmalloc(num * sizeof(char));
//Make new string
char space = ' ';
char *end = "";
int j;
for(j = 0; str[j] != NULL; j++) {
strcat(a, str[j]);
strcat(a, &space);
}
strcat(a, end);
return a;
}
int main(int argc, char **argv) {
puts(vect2str(argv));
//This does not work
//puts(my_vect2str(argv));
}