gpt4 book ai didi

C 编程 : pointers/char array

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:51 26 4
gpt4 key购买 nike

我有一个项目需要我们作为程序员,将一行汇编语言翻译成机器语言并计算小数。我们有自己的带有操作码的示例计算机,以使其更易于计算。我的问题是以下功能是否符合我的目标。

在 main 函数中,我有一个标记为 char binary[3] 的字符数组,因为返回的值将是三位。此外,函数中有一个 char opcode[MAXLINELENGTH],它从文件中正确读取操作码行,因此我在函数中使用 *string 指向它。这会正确找到匹配项并使用正确的 3 位代码填充 main 中的二进制数组吗?

//function should return true if the proper binary output was successfuly copied with the matching opcode
int opcodeBinary(char *string,char *binary){
if(strncmp(*string,"add"){
*binary="000";
return 1;
}
else if(strncmp(*string,"nand"){
*binary="001";
return 1;
}
else if(strncmp(*string,"lw"){
*binary="010";
return 1;
}
else if(strncmp(*string,"sw"){
*binary="011";
return 1;
}
else if(strncmp(*string,"beq"){
*binary="100";
return 1;
}
else if(strncmp(*string,"jalr"){
*binary="101";
return 1;
}
else if(strncmp(*string,"halt"){
*binary="110";
return 1;
}
else if(strncmp(*string,"noop"){
*binary="111";
return 1;
}
else{
return 0;
}
}

最佳答案

不——事实上,它甚至不应该编译。 (您是否尝试过在将代码发布到这里之前编译代码?)

如果字符串相等,

strncmpstrcmp 返回 0(strncmp 需要三个参数,而不是两个!)。要比较两个字符串是否相等,您需要这样的东西:

if (strncmp(string, "nand", 4) == 0) {
...

或者,更简单地说:

if (strcmp(string, "nand") == 0) {
...

由于字符串文字 "nand" 对要比较的字符数设置了限制,因此使用 strncmp 而不是 strcmp` 没有多大意义。

strcmp 的两个参数(或 strncmp 的前两个参数)都是 char* 类型。 string 已经是 char* 类型;假设它指向一个字符串(的第一个字符),只需传递 string,而不是 *string,作为 strcmp 的第一个参数。

*binary = "000"; 甚至不应该编译。 binary = "000"; 会编译,但它不会做你想要的;这是一个指针赋值,它只影响 binary 的值,它是您函数的本地值;函数返回后没有可见效果。

您可以将函数的第二个参数设为 char**;然后调用者可以做类似的事情:

char *binary;
if (opcodeBinary(some_string, &binary) {
/* binary now points to a string like "000" */
}

或者调用者可以为字符串分配空间:

char binary[5]; /* or whatever size you need */

然后在您的函数中,通过调用 strcpy 替换赋值:

strcpy(binary, "000");

不能从函数返回数组;有多种方法可以间接完成同一件事,但它们都有些乏味。

关于C 编程 : pointers/char array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18902021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com