比较strdup函数的返回值和strncmp

时间:2019-03-02 10:32:12

标签: c strcmp

我是C语言的新手。我试图将strdup的两个返回值与strncmp函数进行比较,但出现以下错误:

  

错误:传递“ strncmp”的参数2会使指针从整数转换而无需强制转换[-Wint-conversion]

我的代码:

if (0 == strncmp( strdup(str_to_dup1), strdup(str_to_dup2)))

2 个答案:

答案 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;

您的代码中缺少第三个参数,即要比较的最大字符数