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

因此,当我使用以下代码测试时,我在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 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;
}