如何在字符串中插入system()的结果?

时间:2016-03-31 06:43:21

标签: c windows

我想将命令system("echo %username%");的结果插入字符串中,但我无法弄清楚我是如何在C中完成的。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

使用POSIX函数 popen

#include <stdio.h>

#define LEN(arr) (sizeof (arr) / sizeof (arr)[0])

int main(void)
{
    FILE *f;
    char s[32];
    const char *p;

    f = popen("echo august", "r");
    p = fgets(s, LEN(s), f);
    if (p == NULL) {
        s[0] = '\0';
    }
    pclose(f);

    puts(s);

    return 0;
}

答案 1 :(得分:1)

改编自this C ++解决方案,比August Karlstroms更灵活一点回答你可以这样做:

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

#define S_SIZE 128

char * exec(const char* cmd) 
{
  FILE* pipe = _popen(cmd, "r"); // open a pipe to the command
  if (!pipe) return NULL; // return on Error
  char buffer[S_SIZE];
  int size = S_SIZE;
  char * result = NULL;
  while (fgets(buffer, 128, pipe) != NULL)
  {
    result = realloc(result, size); // allocate or reallocate memory on the heap
    if (result && size != S_SIZE) // check if an error occured or if this is the first iteration 
      strcat(result, buffer);  
    else if (result) 
      strcpy(result, buffer); // copy in the first iteration
    else
    {
      _pclose(pipe);
      return NULL; // return since reallocation has failed!
    }

    size += 128;
  }
  _pclose(pipe);

  return result; // return a pointer to the result string
}

int main(void)
{
  char* result = exec("echo %username%");
  if (result) // check for errors
  {
    printf("%s", result); // print username
    free(result); // free allocated string!
  }
}