请告诉我我在做什么是对还是错。如果它是正确的,那么为什么我会出现分段错误?
#include<stdio.h>
#include<stdlib.h>
char* EncodeToBase64(char*);
int main()
{
char str[24] = {0};
char *output = NULL;
output = malloc(56*sizeof(char));
scanf("%[^\n]s",str);
output = EncodeToBase64(str);
printf("Back %s",*output);
return 0;
}
char* EncodeToBase64(char *str)
{
char buff[24];
char *output = NULL;
output = malloc(56*sizeof(char));
memset(buff,'0',sizeof(buff));
printf("EncodeToBase64 Function\n");
sprintf(buff,"echo %s | openssl enc -base64",str);
printf("%s\n",buff);
output = system(buff);
printf("Back %s",*output);
return output;
}
在纠正我的代码后,我又遇到了一个问题,每次我在字符串ô/+
中添加这三个字符...如何获得精确的字符串?
答案 0 :(得分:5)
system()
会返回int
,这是流程的退出状态,而不是标准输出。
因此,将system()
的返回值分配给char *
并打印出来
没有任何意义。
您可以使用popen()
启动流程并阅读其输出。
示例(使用固定大小的缓冲区,为简洁起见,不进行错误检查):
char * EncodeToBase64(char *str)
{
char buff[1024], output[1024];
snprintf(buff, sizeof(buff), "echo %s | openssl enc -base64", str);
FILE *fp = popen(buff, "r");
size_t amount = fread(output, 1, sizeof(output) - 1, fp);
output[amount] = 0; // zero terminate string
fclose(fp);
return strdup(output);
}
用法:
char *b64 = EncodeToBase64("Hello world");
printf("%s", b64);
free(b64);
// Output: SGVsbG8gd29ybGQK
答案 1 :(得分:4)
printf("Back %s",output);
打印字符串时,output
是参数
free
malloc
'ed
我认为malloc
中的main()
是必要的。