今天用c写题,之前申明字符串的时候,如果是字符数组的话,大小定义的都是刚刚够,如果输入四个字符的话,就是char *a[4], 理论上应该写成char *a[5]。但一直那样写也没问题,就没管最后的那个’\0’字符了,知道今天用到strcpy()函数时,发现了一个自己给自己整的大坑,具体如下
没用strcpy()函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// int cmpInc(const void *a, const void *b);
// int cmpDec(const void *a, const void *b);
int main()
{
char a[4], a_copy[4];
int val1, val2, ans;
scanf("%s", &a); //Inc
// strcpy(a_copy, a); //Dec
printf("a[0]: %c\n", a[0]);
printf("strlen(a): %d\n", strlen(a));
// printf("a_copy[0]: %c\n", a_copy[0]);
return 0;
}
输出
看上去没有什么问题。
当用了strcpy()函数之后
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// int cmpInc(const void *a, const void *b);
// int cmpDec(const void *a, const void *b);
int main()
{
char a[4], a_copy[4];
int val1, val2, ans;
scanf("%s", &a); //Inc
strcpy(a_copy, a); //Dec
printf("a[0]: %c\n", a[0]);
printf("strlen(a): %d\n", strlen(a));
printf("a_copy[0]: %c\n", a_copy[0]);
return 0;
}
输出
代码不规范,一定要给’\0’留个位置