c - 字符串比较功能正常

标签 c pointers strcmp

我正在编写一个程序,该程序必须在 main.c 中使用指针来使用 strcmp 函数。不能有任何用户输入。没有菜单,它必须执行主函数中作为参数的参数。我的问题是我正确调用 strcmp 函数吗?

int main(int n, char **p, char **choice)
{
int i, x, A[100];


if (strcmp(*choice, "mode")==0){

最佳答案

您的代码将编译并且语法正确,但我不确定逻辑是否是您想要的。

通常 main 有 2 或 3 个参数,通常写为 int argc, char **argv, char ** envp (如果只有 2 个,则为第一个) 2)。可以像您一样将它们重命名为 n、p 和 choice,但您需要知道它们各自的含义。

  • argc ("n") 是 argv 数组中的字符串数量,从 0 开始索引。总是至少有 1 个参数 - 程序的名称。在命令行上传递的参数从 argv[1] 开始。

  • argv 是所有参数,包括程序名称。该数组将从 0 到 argc - 1

  • envp 是列出所有环境设置的字符串数组。它以 NULL 条目作为最后一个条目终止。

如果您的任务是将参数作为参数执行,您可能会对循环 argv 中的字符串感兴趣。你会想要这样的东西:

int i = 1;
for (i = 1; i < argc; ++i) {
    if (strcmp(argv[i], "mode") == 0) {

当然,如果你想保留变量名,只需替换它们即可:

int i = 1;
for (i = 1; i < n; ++i) {
    if (strcmp(p[i], "mode") == 0) {

所以,是的。您对 strcmp 的使用在语法上是可以接受的。但它可能不会做你想要的。

祝你好运!

顺便说一句,如果您需要循环 envp,您可以按如下方式执行:

int i = 0;
while (envp[i] != NULL) {
    if (strcmp(envp[i], "mode") == 0) { // or whatever else you needed to do.

关于c - 字符串比较功能正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19940883/

相关文章:

c - 与 C 中指针的区别

c - 如何以可移植的方式从指向结构成员的指针计算指向结构开头的指针?

c - 解释这段代码的正确方法是什么?

c++ - !strcmp 替代 ==

c - 检查字符串是否存在于 C 链表中的函数

c - 用于读取数据库的损坏的 C 代码

c - int 指针不会返回,触发 SIGABRT

c - 警告 : makes pointer to integer without cast

java - 面向对象编程中的等效返回代码

使用 C 编程使用 argc 和 argv 参数创建一个刽子手游戏程序