【问题标题】:cannot read number of args无法读取 args 的数量
【发布时间】:2018-03-24 01:43:06
【问题描述】:

我是 C 新手。我想简单地打印通过命令行提供的参数数量。我认为代码再简单不过了:

#include <stdio.h>
#include <stdlib.h>

int main(int arg_count, char * argv[])
{
printf("%c", arg_count);
};

我正在使用以下 Makefile 进行编译:

program_NAME := testprog
program_C_SRCS := $(wildcard ./src/*.c)
program_CXX_SRCS := $(wildcard ./src/*.cpp)
program_C_OBJS := ${program_C_SRCS:.c=.o}
program_CXX_OBJS := ${program_CXX_SRCS:.cpp=.o}
program_OBJS := $(program_C_OBJS) $(program_CXX_OBJS)
program_INCLUDE_DIRS := 
program_LIBRARY_DIRS :=
program_LIBRARIES :=

CPPFLAGS += $(foreach includedir,$(program_INCLUDE_DIRS),-I$(includedir))
LDFLAGS += $(foreach librarydir,$(program_LIBRARY_DIRS),-L$(librarydir))
LDFLAGS += $(foreach library,$(program_LIBRARIES),-l$(library))

.PHONY: all clean distclean

all: $(program_NAME)

$(program_NAME): $(program_OBJS)
    $(LINK.cc) $(program_OBJS) -o $(program_NAME)

clean:
    @- $(RM) $(program_NAME)
    @- $(RM) $(program_OBJS)

distclean: clean

define OBJECT_DEPENDS_ON_CORRESPONDING_HEADER
    $(1) : ${1:.o=.h}
endef

现在当代码编译并运行时说:

./testprog 1 2 3 4 5 6

没有返回任何东西。我真的不明白为什么这不起作用,因为我可以打印单个参数。 请帮忙。

【问题讨论】:

    标签: c arguments parameter-passing


    【解决方案1】:

    arg_count 为整数类型,打印时使用%d 而不是%c

    检查main() 原型,arg_count 属于int 类型。

    int main(int arg_count, char * argv[]) { 
          printf("%d", arg_count);
          /*  code */
          return 0;
    };
    

    始终在启用警告标志-Wall 的情况下进行编译,这样您就不应该花更多时间解决简单的错误。

    【讨论】:

    • 另外,如果编译器没有给出警告,那就很奇怪了。如果没有,那么可能是 OP 在没有启用警告的情况下进行编译,您可以指出这一点。
    • 是的@IharobAlAsimi 我应该指出这一点。 OP 应该使用启用警告标志进行编译。
    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2023-04-10
    • 2021-05-30
    相关资源
    最近更新 更多