-
字符型数组的定义和初始化
char s[] = "hello";
:在栈上开辟空间并初始化。const char *p = "hello";
:指针p
指向字符串常量区的 "hello",只能读取不能修改。
-
指针变量的类型确定
- 指针变量的类型由其所指向的数据的类型决定。
- 例如,
char *
指向字符型数据,int *
指向整型数据。
-
处理字符串的方式
- 直接定义字符数组存储字符串。
- 使用指针指向字符串常量。
-
const
关键字const
用于限定变量或指针的只读属性。- 如
const int a;
表示a
是只读变量。 const char *s
和char const *s
表示不能通过*s
修改所指向的字符。char * const s
表示指针s
本身不能被修改。const int * const s
表示指针和所指向的内容都不能被修改。
#include <stdio.h>
#include <string.h>
// 从标准输入获取字符串并存储到指定字符数组
char * Gets(char *s)
{
char *ret = s;
while ( (*s = getchar())!= '\n' )
{
s++;
}
*s = '\0';
return ret;
}
// 输出字符串
int Pust(const char *s)
{
while ( *s!= '\0' )
{
putchar(*s);
s++;
}
printf("\n");
return 0;
}
// 计算字符串长度
size_t Strlen(const char *s)
{
const char *ret = s;
while ( *s!= '\0')
{
s++;
}
return s - ret;
}
// 连接两个字符串
char *Strcat(char *dest, const char *src)
{
char *ret = dest;
while ( *dest!= '\0' )
dest++;
while ( *src!= '\0' )
{
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return ret;
}
// 连接指定长度的两个字符串
char *Strncat(char *dest, const char *src, size_t n)
{
char *ret = dest;
while ( *dest!= '\0' )
dest++;
while ( *src!= '\0' && n )
{
*dest = *src;
dest++;
src++;
n--;
}
*dest = '\0';
return ret;
}
// 复制字符串
char * Strcpy(char *dest, char *src)
{
char *ret = dest;
while( *src!= '\0' )
{
*dest = *src;
dest++;
src++;
}
*dest = '\0';
return ret;
}
// 复制指定长度的字符串
char * Strncpy(char *dest, char *src, size_t n)
{
char *ret = dest;
while( *src!= '\0' && n!= 0 )
{
*dest = *src;
dest++;
src++;
n--;
}
while ( n )
{
*dest = '\0';
*dest++;
n--;
}
return ret;
}
// 比较两个字符串
int Strcmp(const char *dest, const char *src)
{
while ( *dest == *src && *dest!= '\0' && *src!= '\0' )
{
dest++;
src++;
}
return *dest - *src;
}
// 比较指定长度的两个字符串
int Strncmp(const char *dest, const char *src, size_t n)
{
while ( *dest == *src && *dest!= '\0' && *src!= '\0' && n > 1 )
{
dest++;
src++;
n--;
}
return *dest - *src;
}
// 主函数,用于测试上述函数
int main()
{
// 定义并初始化字符数组 a
char a[20];
// 调用 Gets 函数获取用户输入并存储到 a 中
Gets(a);
char s[100];
// 调用 Gets 函数获取用户输入并存储到 s 中
Gets(s);
// 调用 Strncmp 函数比较 a 和 s 的前 3 个字符,并输出结果
printf("%d\n", Strncmp(a, s, 3));
return 0;
}