【发布时间】:2021-09-03 11:53:34
【问题描述】:
你好;
我的程序有问题,需要计算 IP 地址的@host 网络。该程序的步骤是:
- 将掩码和 ip 添加到二进制(int 格式)的“网络”变量中
- 将“reseau”变量转换为十进制(在 char[] 中)
- 在 main 中返回“network”变量
无论如何,我在第 1 步。为了看到一切正常,我试图返回包含二进制加法的字符串“reseau”。
问题:很遗憾,我做不到。它给了我以下错误代码:
从返回类型为 'char' 的函数返回 'char *' 使得 没有强制转换的整数 [-Wint-conversion] 33. return reseau;
我怀疑这是因为您无法返回这样的字符标签(根据我的研究),但我无法弄清楚。
代码:
#include <stdio.h>
#include <stdio.h>
#include <string.h>
char calcul(char* octet, char* masque);
void main(){
char octetB[]="11000000101010000000000100000111";
char masqueB[]="11111111111111111111111100000000";
printf("octetB : %s\n", octetB);
printf("octetB 3e valeur : %c\n", octetB[2]);
printf("Adresse réseau : %s\n", calcul(octetB, masqueB));
}
char calcul(char* octet, char* masque){
int i;
char reseau[100];
printf("\n");
printf("octet dans calcul : %s\n", octet);
printf("masque dans calcul : %s\n", masque);
for(i=0; i<32; i++){
if((octet[i]='1') && (masque[i]='1')){
reseau[i]='1';
} else {
reseau[i]='0';
}
printf("nombre %d : %d\n", i, reseau[i]);
}
return reseau;
}
所以我很想得到一些帮助来知道我哪里出错了? 为了理解。谢谢:D
【问题讨论】:
-
你不能返回
reseau,那个变量是本地的,我敢肯定有很多重复解决这个问题。 -
另外,为了解决这个错误,如果你有一个可以返回的有效字符串,你的返回类型必须是
char* calcul...。 -
@Baptiste B - 当然你可以返回(并因此使用)一个 local 变量的(地址);范围没有障碍,生命周期是。声明
static char reseau[100];。 - 除了anastaciu 建议的更改之外,您进行了不合理的更改。 -
@Armali 如果函数不使用全局/静态数据,那么您不必将其记录为线程不安全,如果被 OP/其他人或设计更改,因此不会成为另一个 strtok()。这可能不是问题,但应该记录带有约束的代码(尤其是在 SO 上),或者删除约束。