gpt4 book ai didi

c - 赋值从整数生成指针而不进行强制转换

转载 作者:太空狗 更新时间:2023-10-29 16:25:42 25 4
gpt4 key购买 nike

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

/*
* PURPOSE
* Do case-insensetive string comparison.
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>

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 从指针生成整数而不进行强制转换
    • 返回cString;

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

最佳答案

C 字符串与 Java 字符串完全不同。它们本质上是字符数组。

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

您的 strToLower 进行了所有更改,没有理由返回任何内容,尤其是不返回字符。您应该“返回”void 或 char*。

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

根据我的经验,对于从 Java/C# 背景回到 C 的任何人来说,C 中的字符串是最难学习的部分。人们可以接受内存分配(因为即使在 Java 中,您也经常分配数组)。如果您的最终目标是 C++ 而不是 C,您可能更愿意减少对 C 字符串的关注,确保您了解基础知识,并只使用来自 STL 的 C++ 字符串。

关于c - 赋值从整数生成指针而不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2074009/

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