算法方面没什么难点,主要就是一些最基本的操作细节。
1.字符串和字符数组
在C语言中,字符串和字符数组都用char arr[]形式声明,具体初始化赋值存在差别:
// 字符数组赋初值
char cArr[] = {'I','L','O','V','E','C'};
// 字符串赋初值
char sArr[] = "I LOVE C";
在声明字符串时 需为结尾’\0’保留一个字节,否则获得的字符串不完整,在实际输出时将无法结束,从而导致后续跟随的不属于本字符串的内容也将被一起输出。
求取其长度可用sizeof 和 strlen 2个函数:
printf("cArr的长度=%d\n", sizeof(cArr)); // 对于上例其值为6
printf("sArr的长度=%d\n", sizeof(sArr)); // 值为7 printf("cArr的长度=%d\n", strlen(cArr)); // 值为7
printf("sArr的长度=%d\n", strlen(sArr)); // 值为6
2.stdio操作
在C语言中,从bash获取输入到系统变量踩了不少坑。
在Visual Studio中,不建议使用scanf函数,而建议使用scanf_s函数。总结得到对于字符串、单个字符、数字的获取方式的代码可写为:
// 字符串输入
char input[20];
gets_s(input, LEN); // 直到输入回车才结束 接收整个字符串 包括'\0'
// 单个字符输入
char symbol = (char)getchar();
// 获取单个数字
int number = 0;
scanf_s("%d", &number);
getchar(); // 需要附加该语句来接收 从bash输入用于表示结束的回车
在Linux中,没有scanf_s和gets_s函数,且其包含的getline函数并不合用,都需采用scanf函数进行处理,代码可写为:
// 字符串输入
char input[20];
scanf("%[^\n]", input);
getchar();
// 获取单个字符输入
char symbol = (char)getchar();
// 获取单个数字输入
int number = 0;
scanf("%d", &number);
getchar();
3.项目文件编译及组织
一般一个项目包含3个文件夹:header,source,output,在编写组织过程中,所有.h文件放入到header文件夹中,所有.c文件(包括main函数文件)放入到source文件夹中,output文件夹保存生成的文件。
在Visual Studio中这样组织编写代码没有问题,其可以帮助管理的很好。
在Linux的VS Code中,就需要在文件编写中注意一点,在.c文件的头文件包含中:
#include <库文件> // 没问题
#include "自建头文件" // 编译提示找不到文件
#include "header/自建头文件" // 编译提示找不到文件
#include "../header/自建头文件" // 只有这样写才能通过编译
一般还编写build.sh脚本文件来帮助编译,其一般放在主目录中,与header,source,output文件夹平级。
当使用math.h头文件中的函数时 在编译文件时 需在编译命令末尾添加-lm选项,如:
gcc main.c source/module.c -o main.out -lm