c - 以 ' * ' 作为参数的错误
问题描述
我是初学者,并尝试学习一些 c。我编写了一个程序来学习函数指针,并在启动时为程序提供 3 个参数:一个 int、一个运算符和另一个 int。使用 %、-、+ 和 / 一切正常。但是对于 * 我有一个非常奇怪的错误。经过大量的 write() 到处寻找它开始出错的地方后,我发现它在一开始:当我显示 argv[2][0] 时,它会显示除 * 之外的所有内容的好字符显示“Makefile”...我真的不明白这个问题,我没有找到任何与 * 和 arguments 错误相关的东西。我什至不会在指针或其他东西上出错,因为它从一开始就是。
这是代码的开头,因此您可以看到:
#include"header.h"
void ft_putchar(char c)
{
write(1, &c, 1);
}
void ft_putstr(char *str)
{
int i;
i = 0;
while (str[i] != '\0')
{
ft_putchar(str[i]);
i++;
}
}
int main(int argc, char **argv)
{
int a;
int b;
char operator;
ft_putchar(argv[2]); //here it shows "Makefile"...
还有一些输出:(首先是 char 表示,然后是字符数,然后是 char 表示,但在代码中更远,然后是结果,* 始终为 0,因为它只是在接下来不遵循任何条件后退出 main)
➜ exercice05 ./ft_op 100 / 5
/1/20
➜ exercice05 ./ft_op 100 + 5
+1+105
➜ exercice05 ./ft_op 100 - 5
-1-95
➜ exercice05 ./ft_op 100 % 5
%1%0
➜ exercice05 ./ft_op 100 * 5
Makefile80
这个错误是如此奇怪,我只能想象它是显而易见的,但我现在一无所知。我的目录中确实有一个 Makefile,但我真的不知道问题出在哪里。我在 macOS Catalina 上,尝试过 bash 和 zsh,结果相同。以防万一这是makefile:
TARGET = ft_op
SRC = $(wildcard *.c)
OBJ = $(SRC:.c =.o)
FLAG = -Wall -Wextra -Werror
CC = gcc
$(TARGET): $(OBJ)
$(CC) $(FLAG) $^ -o $@
.PHONY: clean fclean
clean:
rm -f *.o
fclean: clean
rm -f $(TARGET)
谢谢
解决方案
您的 C 程序没有*
作为参数,因为您的外壳首先扩展它。您需要在调用程序时或调用程序时使用'*'
它\*
:exercice05 ./ft_op 100 '*' 5
或exercice05 ./ft_op 100 \* 5
比较 和 的输出,echo *
使其更清晰。echo '*'
echo \*
推荐阅读
- xml - 使用 Shell 脚本将 XML 文件的标签存储在数组中
- java - Spring Security login fails despite correct username and password
- javascript - 如何在页面中重置 Jquery 动画?
- google-cloud-platform - Upsize network specs for faster networking on GCP compute engine instances?
- amazon-web-services - Bitnami Parse Server Dashboard 添加邮件适配器
- javascript - onclick 功能在节点 js 中不起作用
- regex - 在大文件中,正则表达式的交替似乎非常慢
- android - Android设置微调器的Dialog样式\主题
- ruby-on-rails - 获取 nginx 的欢迎页面而不是 rails 主页
- git - git fork master 总是在 origin/master 之前,在本地和远程