【问题标题】:Returning array of C strings as an Integer?将C字符串数组作为整数返回?
【发布时间】:2015-12-28 23:14:58
【问题描述】:

我是 的初学者。我有一个函数可以返回 c 字符串的长度和数组。但是,我很难弄清楚如何将两者都作为int 发送。我曾尝试使用void 指针,但编译器会生成一个错误,指出返回指针(预期为int)。此外,我尝试实现 aToI 方法,但没有得到所需的结果。我意识到我只能返回 c 字符串数组并使用 strlen() 函数获取其长度。但是,我们如何将 c 字符串数组作为整数发送。请举例说明。谢谢 这是我的代码的样子

int read_header( char *fileName , char **headerRow )
{
    int length= header_columns(fileName);
    headerRow[0]=(char*)malloc(length);
    FILE *fp;
    char c;
    char **header;
    char *savedheader;
    char *returnPointer;
    int counter=0;
    header[0]=(char*)malloc(Max_Line_Length);
    char *pointer=header[0];
    while((c=getc(fp))!='\n')
    {
        if(c!='\n')
        {
            if(c==',')
            {
                length++;
            }
            *pointer++=c;
        }
        else
        {
            length++;
            *pointer='\0';

        }

    }
   pointer=strtok_r(pointer,",",&savedheader);
    while(pointer!=NULL)
    {
        headerRow[counter]=pointer;
        pointer=strtok_r(pointer,",",&savedheader);
        counter++;
    }
    returnPointer= headerRow[0];
    return &returnPointer;


}

我正在阅读以逗号分隔的单词行作为字符。然后我使用 strtok_r() 方法将这些字符解析为 c 字符串。现在,我需要将 headerRow 数组作为整数返回给另一个函数。

【问题讨论】:

  • 返回地址也是报错。
  • 我认为,您不应该将 c 字符串数组作为整数发送。将它们的数组作为多个整数发送也可能不好。你应该有更好的方法来传递你的数据。
  • 我不明白你的问题,你想生成一个整数数组吗?
  • 您需要发布给您带来麻烦的代码。不看代码就无法回答问题。
  • 真正有帮助的一件事是,如果您发布您尝试过的内容。 void 指针没有什么神奇之处,但在使用它们时必须遵循一些规则。如果您发布您尝试过的内容,我们可能会提供帮助。请尽快阅读About 页面并访问描述How to Ask a Question 的链接。提供必要的详细信息,包括您的代码和相关错误(如果有),将允许这里的每个人帮助您解决问题。

标签: c c arrays pointers return c-strings


【解决方案1】:

传递 C 字符串数组的示例,而不是整数

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

int func(char ***return_str) {
    char string_to_return[] = "Hello, world";
    char string_to_return_2[] = "hoge hoge foo bar";
    char **array_of_strings = malloc(sizeof(char*) * 2);
    char *ptr = malloc(strlen(string_to_return) + 1);
    char *ptr2 = malloc(strlen(string_to_return_2) + 1);
    if (array_of_strings == NULL || ptr == NULL || ptr2 == NULL) exit(1);
    strcpy(ptr, string_to_return);
    strcpy(ptr2, string_to_return_2);
    array_of_strings[0] = ptr;
    array_of_strings[1] = ptr2;
    *return_str = array_of_strings;
    return 2;
}

int main(void) {
    char **strings;
    int len;
    int i;
    len = func(&strings);
    for (i = 0; i < len; i++) {
        printf("string %d = %s\n", i, strings[i]);
    }

    for (i = 0; i < len; i++) free(strings[i]);
    free(strings);
    return 0;
}

【讨论】:

    【解决方案2】:

    您不能将数组作为 int 发送。您必须将数组作为数组或指向该数组的指针传递。如果您想从函数中取回这两个值,请创建一个包含 int 和数组的结构,并从函数中返回结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多