gpt4 book ai didi

c - SYSTEM 调用执行后的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:13:39 25 4
gpt4 key购买 nike

请告诉我我做的是对还是错。如果它是正确的,那么为什么我会遇到段错误?

#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;
}

在更正我的代码后,我又遇到了一个问题,每次我在我的字符串 ô/+ 中附加这三个字符时...如何获得准确的字符串?

最佳答案

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

关于c - SYSTEM 调用执行后的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18506793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com