我正在尝试连接两个字符,并在返回的行上获得分段错误。 当我使用char而不是char *时,(onechar-a +'A')工作,虽然我没有尝试连接。如果我把它留作char而不是char *,我会收到关于施法的警告。
char *carat;
carat = test_carat(ttyinfo.c_cc[VINTR]);
carat = test_carat(ttyinfo.c_cc[VINTR]);
char * test_carat(char onechar)
{
if (onechar >= 32 || onechar !=127)
{
if (iscntrl(onechar))
{
char * returnString = strcat((char*)'^', (char*)(onechar - 1 + 'A'));
return returnString;
}
}
}
答案 0 :(得分:3)
这不起作用:
strcat((char*)'^', (char*)(onechar - 1 + 'A') )
您不应该将字符强制转换为char指针。结果是字符值(值<= 255)将被strcat
用作字符指针的地址,这就是你的程序段错误的原因。
你可以这样做:
char * test_carat(char onechar)
{
if (onechar >= 32 || onechar !=127)
{
if (iscntrl(onechar))
{
char * returnString = (char *)malloc(3);
returnString[0] = '^';
returnString[1] = (onechar - 1 + 'A');
returnString[2] = '\0';
return returnString;
}
}
return NULL;
}