由于某种原因,下面的代码编译和运行良好,但是在添加C/C++ VsCode扩展之后,我得到一个语法错误,说参数太少。
作为背景,我在main中接收用户输入,将字符串传递给this函数,在这里我使用" \n"
作为分隔符对字符串进行标记化,每个标记表示一个不同的“命令”。我在这里的目标是将每个标记存储在不同的索引中以验证它们,然后将最初给定的字符串input
传递给不同的函数,因为它需要作为一个值传递。
int login(int socket, char *input) {
if (socket > 0 && input != NULL && strlen(input) > 0) {
char buffer[MAX_LINE];
strcpy(buffer, input);
strtok(buffer, " \n");
我尝试做的事情的简化版本:
标题:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int test(char *input);
主要:
#include "so_test.h"
int main() {
char buffer[256];
fgets(buffer, sizeof(buffer), stdin);
char *delim_1 = strtok(buffer, " \n");
int func(buffer);
return 1;
}
定义
#include "so_test.h"
int func(char *input) {
char input_buff[256];
strcpy(input_buff, input);
char *delim_2 = strtok(input_buff, " \n");
char *delim_3 = strtok(NULL, " \n");
return 1;
}
我的Makefile
C标志是:set(CMAKE_C_FLAGS "-std=c11 -Wall -Wextra -Wshadow -Werror")
这是因为不同的编译器路径吗?考虑到我没有遇到任何实际的编译或运行时错误?
1条答案
按热度按时间oknrviil1#
听起来您可能应该忽略“C/C++ VSCode扩展”警告:
建议:
VSCode扩展警告可能是由“strcpy()"旁边的 else 触发的。
考虑在一个minimal, reproducible example中重现这个问题,如果你可以在一个小型的独立测试中重现它,那么一定要复制/粘贴 * 精确的 * 错误文本和行号。