首页 文章

如何使这个函数返回一个字符串

提问于
浏览
0

我有这个代码:

static char * display(const u8 array[], int length) {
    int i;
    char *str;
    for (i = 0; i < length; i++) {
        if (i%32 == 0) {
            //printf("\n");
            strcat(str, "\n");
        }
        if (i%8 == 0) {
            //printf(" ");
            strcat(str, " ");
        }
        //printf("%02X", array[i]);
        strcat(str, (char *)array[i]);
    }
    return str;
    /*
    char str[80];
    strcpy (str,"these ");
    strcat (str,"strings ");
    strcat (str,"are ");
    strcat (str,"concatenated.");
    puts (str);
    return 0;
    */
}

最初这段代码是打印一个字符串 . 我不希望它打印一个字符串,我需要让它返回一个字符串 . 但它给了我这个错误:

main.c:在函数'display'中:main.c:1707:9:警告:传递'strcat'的参数2使整数的指针没有强制转换[默认为ena bled] strcat(str,array [i]) ;
^在main.c中包含的文件:61:0:
/usr/include/string.h:133:14:注意:期望'const char * restrict'但参数类型为'u8'extern char * strcat(char * __ restrict __dest,const char * __ restrict __src)^ sh-4.2 #gcc -o main * .c main.c:在函数'display'中:main.c:1707:21:警告:从不同大小的整数转换为指针[-Wint-to-pointer-cast] strcat(str, (char *)array [i]);

编辑:

构建共享对象和加载:

VALUE generateIt(char *valor) {
  struct NESSIEstruct w;
  u8 digest[DIGESTBYTES];

  int i;
  for(i=0; valor[i]!='\0'; ++i);
  int sizeo = i;

  NESSIEinit(&w);
  NESSIEadd((u8*)valor, 8*sizeo, &w);
  NESSIEfinalize(&w, digest);
  return displayIt(digest, DIGESTBYTES);
}

在上面我做:

#include 'ruby.h'

我还添加了这个:

void
Init_whirlpool(){
  rb_mWhirlpool = rb_define_module("Whirlpool");
  rb_cClass = rb_define_class_under(rb_mWhirlpool, "Class", rb_cObject);
  rb_define_method(rb_cClass, "generate", generateIt, 1);
}

1 回答

  • 2

    我相信这就是你所需要的

    static char *display(const unsigned char array[], int length)
    {
        int  i, k;
        char *str;
    
        str = malloc(3 * length + 1);
        if (str == NULL)
            return NULL;
        k      = 0;
        str[0] = '\0';
        for (i = 0; i < length; i++) {
            char hex[3];
    
            if (i % 32 == 0)
                str[k++] = '\n';
            if (i % 8 == 0)
                str[k++] = ' ';
            snprintf(hex, sizeof(hex), "%02X", array[i]);
    
            str[k++] = hex[0];
            str[k++] = hex[1];
        }
        str[k] = '\0';
    
        return str;
    }
    

    snprintf 是POSIX,如果它给出了编译错误,请将其更改为 _snprintf .

    并且不要忘记 free 调用函数中的返回值 .

相关问题