c函数不工作
因此,当我使用以下代码测试时,我在segfaulting中实现了以下c函数:c函数不工作,c,segmentation-fault,char-pointer,C,Segmentation Fault,Char Pointer,因此,当我使用以下代码测试时,我在segfaulting中实现了以下c函数: char line1[] = "sw $s2, 0($s3)"; char* bc = removeAFromABC(line1); 此方法应返回char指针=“$s2,0($s3”): “bc”是在堆栈上分配的。当函数返回该地址时,该地址无效 试着这样做: char bc[MAXIMUM_LINE_LENGTH + 1]; void removeAFromABC(char* abc, char * bc, int
char line1[] = "sw $s2, 0($s3)";
char* bc = removeAFromABC(line1);
此方法应返回char指针=“$s2,0($s3”):
“bc”是在堆栈上分配的。当函数返回该地址时,该地址无效 试着这样做:
char bc[MAXIMUM_LINE_LENGTH + 1];
void removeAFromABC(char* abc, char * bc, int size) {
char* a = strtok(abc, " $,\t\n");
char* b = strtok(NULL, " \t");
char* c = strtok(NULL, " \t");
/* TODO: use the size parameter here for checking...*/
strcpy(bc, b);
strcat(bc, c);
}
bc
是函数的自动局部变量removefromabc
。永远不要返回指向自动局部变量的指针。因为变量bc
在removefromabc
返回后不存在,所以指向它的指针将无效。对于bc decla,返回类型为char*
红色为:
char bc[最大行长+1];
它不是合法的返回类型。(它不会那样构建) 请尝试以下方法:
#include <ansi_c.h>
#include <windows.h>
#define MAXIMUM_LINE_LENGTH 260
char* removeAFromABC(char* abc);
int main(void)
{
char line1[] = "sw $s2, 0($s3)";
char* bc = removeAFromABC(line1);
printf("bc is %s", bc);
return 0;
}
char* removeAFromABC(char* abc)
{
char* a = strtok(abc, " $,\t\n");
char* b = strtok(NULL, " \t");
char* c = strtok(NULL, " \t");
char *bc = malloc(MAXIMUM_LINE_LENGTH); //to match return type
strcpy(bc, b);
strcat(bc, c);
return bc;
}
#包括
#包括
#定义最大线长度260
char*removefromabc(char*abc);
内部主(空)
{
字符行1[]=“sw$s2,0$s3”;
char*bc=removefromabc(第1行);
printf(“bc是%s”,bc);
返回0;
}
char*removefromabc(char*abc)
{
char*a=strtok(abc,“$,\t\n”);
char*b=strtok(空,“\t”);
char*c=strtok(空,“\t”);
char*bc=malloc(最大行长);//匹配返回类型
strcpy(bc,b);
strcat(bc,c);
返回bc;
}
注意:我没有完全重组您的代码,但它确实需要更多的工作。即根据需要分配和释放内存。这与我回答您的问题相同吗?
#include <ansi_c.h>
#include <windows.h>
#define MAXIMUM_LINE_LENGTH 260
char* removeAFromABC(char* abc);
int main(void)
{
char line1[] = "sw $s2, 0($s3)";
char* bc = removeAFromABC(line1);
printf("bc is %s", bc);
return 0;
}
char* removeAFromABC(char* abc)
{
char* a = strtok(abc, " $,\t\n");
char* b = strtok(NULL, " \t");
char* c = strtok(NULL, " \t");
char *bc = malloc(MAXIMUM_LINE_LENGTH); //to match return type
strcpy(bc, b);
strcat(bc, c);
return bc;
}