当前位置:  开发笔记 > 编程语言 > 正文

赋值使得整数指针不需要强制转换

如何解决《赋值使得整数指针不需要强制转换》经验,为你挑选了2个好方法。

来自Java背景我正在学习C,但我发现那些模糊的编译器错误消息越来越令人沮丧.这是我的代码:

/*
 * PURPOSE
 *      Do case-insensetive string comparison.
 */
#include 
#include 
#include 

int compareString(char cString1[], char cString2[]);
char strToLower(char cString[]);

int main() {
    // Declarations
    char cString1[50], cString2[50];
    int isEqual;

    // Input
    puts("Enter string 1: ");
    gets(cString1);
    puts("Enter string 2: ");
    gets(cString2);

    // Call
    isEqual = compareString(cString1, cString2);
    if (isEqual == 0)
        printf("Equal!\n");
    else
        printf("Not equal!\n");

    return 0;
}

// WATCH OUT
//      This method *will* modify its input arrays.
int compareString(char cString1[], char cString2[]) {
    // To lowercase
    cString1 = strToLower(cString1);
    cString2 = strToLower(cString2);

    // Do regular strcmp
    return strcmp(cString1, cString2);
}

// WATCH OUT
//      This method *will* modify its input arrays.
char strToLower(char cString[]) {
    // Declarations
    int iTeller;

    for (iTeller = 0; cString[iTeller] != '\0'; iTeller++)
        cString[iTeller] = (char)tolower(cString[iTeller]);

    return cString;
}

这会产生两个警告.

赋值从整数中生成没有强制转换的指针

cString1 = strToLower(cString1);

cString2 = strToLower(cString2);

return从指针生成整数而不进行强制转换

return cString;

有人可以解释这些警告吗?



1> Uri..:

C字符串不像Java字符串.它们本质上是字符数组.

您收到错误是因为strToLower返回一个char.char是C中的整数形式.您将它分配给char [],它是一个指针.因此"将整数转换为指针".

你的strToLower完成了所有的更改,没有理由返回任何东西,特别是不是char.你应该"返回"void或char*.

在调用strToLower时,也不需要赋值,你实际上只是传递cString1的内存地址.

根据我的经验,对于任何来自Java/C#背景的人来说,C语言中的字符串最难学习.人们可以与内存分配相处(因为即使在Java中,您也经常分配数组).如果你的最终目标是C++而不是C,你可能更愿意关注C字符串,确保你理解基础知识,并且只使用STL的C++字符串.



2> James..:

用strtolower的返回类型应该是char*没有char (或者它应该返回什么都没有,因为它不重新分配的字符串)

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有