C:从另一个函数返回字符串

时间:2015-04-07 23:11:02

标签: c string pointers

我是C /指针/内存管理的新手,我在为正在进行的项目实现一些函数时遇到了麻烦。

在我的builtins.c文件中,我有一个名为printalias的函数,它被调用来打印存储在程序中的所有别名和相应的值。最后,我想通过另一个名为getal的函数检索其中一个别名。

int x_printalias(int nargs, char *args[]) {
  int i = 0;
  // Loop through, print names and values
  for(i = 0; i< 100; i++)
  {
    if(alias_names[i][0]!='\0' && !alias_disabled[i])
    {
      char * var = alias_names[i];
      char * val = alias_vals[i];
      fprintf(stderr,"%s = %s\n", var, val );
    }
  }
  // This is where I want to retrieve the string from another function
  char * hello = "brett";
  hello = getal(hello);
  fprintf(stderr,"Got alias for brett --> %s",hello);
  return 0;
}

my getal函数存在于我的shellParser.c文件中,看起来像这样,通常执行相同的循环并在找到它时返回:

const char * getal(int nargs, char *args[])
{
  fprintf(stderr,"\nRetrieving alias...\n");
  int i = 0;
  fprintf(stderr, "check1\n" );

  fprintf(stderr,"Got args[0]: %s\n", args[0]);

  while (alias_names[i][0]!='\0' && i < MAX_ALIAS_LENGTH ) // Find empty slot in variables array
  {
    fprintf(stderr, "check2\n" );

    fprintf(stderr,"I is currently %i and current varible in slot is %s\n",i,alias_names[i]);
    //strncpy(hello, variables[i], MAX_VAR_LENGTH);  // Variable at current slot
    if(strcmp(alias_names[i], args[0]) == 0) // If we have an entry, need to overwrite it
    {
      fprintf(stderr,"Found  alias %s = %s at spot %i\n",args[0],alias_vals[i], i); // Not at end if here
      return alias_vals[i];
    }
    i++;
  }
  fprintf(stderr, "check3\n" );

  // Elided....

  return '\0';
}

在我的printalias函数的最后,我想通过在硬编码字符串“brett”上调用它来测试这个getal函数是否正常工作。但是,当我从命令行调用printalias function时,它会进入“Check 1”打印语句,然后只是退出而不会出错或返回值。

我认为这与我的内存管理或使用指针的变量声明不正确有关。任何人都可以发现我在这里做错了什么(或许多事情)吗?

2 个答案:

答案 0 :(得分:0)

您必须声明要调用getal的参数列表并使用这些调用 名单。 返回值getal的指针必须为const char*

  //....
    // This is where I want to retrieve the string from another function
      char * hello[] = {"brett"}; // this list argument for getal function
      const  char *strGetal; 
      strGetal = getal(1,hello);
      fprintf(stderr,"Got alias for brett --> %s",strGetal);
      return 0;
    }

答案 1 :(得分:-1)

示例:

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


char** get_all(int argc, char **argv)
{
    char *value;
    char **values = NULL;
    int i;

    values = (char**) malloc(sizeof (char) * argc);
    if (values == NULL) {
        perror("malloc");
        return NULL;
    }


    for (i = 0; i < argc; i++, argv++) {
        value = strchr(*argv, ':');
        values[i] = (value + 1);
    }

    return values;
}

int main()
{
    char *args[] = {"key:a", "key:b", "key:c"};
    char **values;
    int i;

    values = get_all(3, args);

    for (i = 0; i < 3; i++) {
        puts(values[i]);
    }

    return 0;
}