无法使用字符串将“main”转换为“void”函数[关闭]

Posted

技术标签:

【中文标题】无法使用字符串将“main”转换为“void”函数[关闭]【英文标题】:Cannot convert 'main' to 'void' function with string [closed] 【发布时间】:2016-07-06 05:18:43 【问题描述】:
#include <stdio.h>
#include <string.h>

typedef char String[80];

int main() 
    String originalStr = "mail";
    String reversedStr; 
    int index;
    int len = strlen(originalStr);

    for (index = 0; index < len; index++)  
        reversedStr[index] = originalStr[len - index -1];
    
    reversedStr[index] = '\0'; 

    printf("Original is %s, reversed is %s\n", originalStr, reversedStr);

我想知道如何修改 main 函数以使用带有原型的 void 函数:void reverseString(String originalStr, String reversedStr);

事实上,我无法理解voidmain 之间的区别。

【问题讨论】:

您需要查看The Definitive C Book Guide and List 并找到一本不错的初学者书籍或教程。它将告诉您如何创建函数(您实际上知道,main 只是一个普通函数)。然后继续how to ask good questions。最后更新您的问题以更具体地解决您的问题,您遇到的问题到底是什么?如何创建函数? (读一本书。)了解void 在不同地方的含义? (也读一本书。) 另外,你应该删除 C++ 标签。 有many similar questions。 main函数是程序的main函数,你要做的就是定义另一个函数,这个函数会从main函数中调用。您应该先阅读一些教程,因为显然您对自己在做什么不是很清楚 【参考方案1】:

在深入了解 C 语言之前,您必须学会正确缩进代码。它将使您的代码可读并防止许多愚蠢的错误。

我重新格式化了您发布的代码,看看它是如何完成的。

关于您的问题,您应该将用于反转字符串的代码移动到为您提供原型的单独函数中:

#include <stdio.h>
#include <string.h>

typedef char String[80];

void reverseString(String originalStr, String reversedStr) 
    int index;
    int len = strlen(originalStr);

    for (index = 0; index < len; index++)  
        reversedStr[index] = originalStr[len - index - 1];
    
    reversedStr[index] = '\0'; 
         

int main(void) 
    String originalStr = "mail";
    String reversedStr; 
    reverseString(originalStr, reversedStr);
    printf("Original is %s, reversed is %s\n", originalStr, reversedStr);

函数是编程语言中将功能分解为更小的可重用步骤的基本块。请注意,函数中的originalStrreverseStr 是函数参数的名称。它们是函数的局部变量。从main 传递的值在构造上碰巧具有相同的名称,但这不是必需的。从一本好的教程书中了解更多信息。

【讨论】:

以上是关于无法使用字符串将“main”转换为“void”函数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C程序调用字符串到int函数,我无法转换输入

将 void* 转换为 std::string

套接字编程 connect() 函数错误——“无法将 'main(int, char**)::sockaddr* 转换为 'const sockaddr”

更新到 Xcode 12:无法将类型“DataRequest”的值转换为闭包结果类型“Void”

C++ 枚举类型声明可以放在 int main 的前面吗?

(void(*)(void)) &shellcode啥意思?