我是C
语言的新手。我试图将strdup
的两个返回值与strncmp
函数进行比较,但出现以下错误:
错误:传递“ strncmp”的参数2会使指针从整数转换而无需强制转换[-Wint-conversion]
我的代码:
if (0 == strncmp( strdup(str_to_dup1), strdup(str_to_dup2)))
答案 0 :(得分:2)
来自strncmp
strncmp
int strncmp(const char * lhs,const char * rhs,size_t count);
在您的代码中,您缺少strncmp
的第三个参数,它是要比较的最大字符数。
您的程序可能存在内存泄漏,因为strdup()
返回的指针将在strncmp()
调用之后丢失。另外,您应该注意,如果发生错误,strdup()
可以返回null
指针。
您应该使用strdup()
返回的指针指向变量,并确保检查是否发生了某些错误,然后将这些变量传递给strncmp()
。使用strdup()
返回的指针完成后,请使用free()
释放它们。
答案 1 :(得分:0)
strncmp采用如下所示的3个参数
import React from "react";
class Field extends React.Component {
constructor(props) {
super(props);
this.state = {
value: "empty",
specVisible: "hidden",
display: "none"
};
}
SelectChange = event => {
this.setState({ value: event.target.value });
if (event.target.value === "string") {
this.setState({ specVisible: "visible" });
this.setState({ display: "block" });
} else {
this.setState({ specVisible: "hidden" });
this.setState({ display: "none" });
}
};
render() {
const { SelectChange } = this;
const { value, specVisible, display } = this.state;
const styles = this.props.remove
? { display: "inline", visibility: "visible" }
: { display: "inline", visibility: "hidden" };
return (
<div>
<div>
<label>
<strong>New Field </strong>
</label>
<div id="remove-" className="remove" style={styles}>
<label> --Remove </label>{" "}
<input
type="checkbox"
id="removeBox"
className="rmvCheckbox"
onChange={e => {
this.props.mark(e.target.checked, this.props.id);
}}
/>
<br />
</div>
<label> Name: </label>
<input id="name-" className="name" type="text" name="name" /> <br />
<label> Description: </label>
<input
id="description-"
className="description"
name="description"
/>{" "}
<br />
<label> Datatype: </label>
<select
value={value}
onChange={SelectChange}
id={`selectData-${this.props.number}`}
className="selectData"
name="selectData" /*onClick={AddListener}*/
>
<option value="empty"> </option>
<option value="string"> String </option>
<option value="character"> Character </option>
<option value="timestamp"> Timestamp </option>
<option value="integer"> Integer </option>
<option value="long"> Long </option>
<option value="double"> Double </option>
<option value="boolean"> Boolean </option>
</select>{" "}
<br />
</div>
<div
id={`specifySection-${this.props.number}`}
className="specifySection"
style={{ visibility: specVisible, display: display }}
>
<label> Specify Length: </label>
<input className="specifyLength" type="text" name="length" /> <br />
</div>
</div>
);
}
}
export default Field;
您的代码中缺少第三个参数,即要比较的最大字符数