我有这个代码:
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 回答
我相信这就是你所需要的
snprintf
是POSIX,如果它给出了编译错误,请将其更改为_snprintf
.并且不要忘记
free
调用函数中的返回值 .