在C语言中,使用指针输入字符串的核心观点有:利用指针指向字符数组、使用标准输入函数如scanf和gets、使用动态内存分配函数如malloc。 其中,利用指针指向字符数组是最常见且基础的方法,下面将对此进行详细描述。
利用指针指向字符数组,首先需要定义一个字符数组并用指针指向它。然后,通过标准输入函数读取输入字符串并存储在数组中。比如使用scanf函数,可以将输入的字符串存储在字符数组中,通过指针访问和操作该数组中的内容。
一、定义字符数组并利用指针
在C语言中,字符数组是存储字符串的基础数据结构。定义一个字符数组,并用指针指向它,可以方便地进行字符串输入和操作。
#include <stdio.h>
int main() {
char str[100]; // 定义字符数组
char *ptr = str; // 定义指针并指向字符数组
printf("Enter a string: ");
scanf("%s", ptr); // 使用指针输入字符串
printf("You entered: %sn", ptr); // 使用指针输出字符串
return 0;
}
在上述代码中,定义了一个字符数组str
和一个指向str
的指针ptr
。通过scanf
函数读取用户输入的字符串并存储在字符数组中,最后通过指针输出字符串。
二、使用标准输入函数
C语言提供了多种标准输入函数用于读取字符串,常见的有scanf
、gets
和fgets
。
1、scanf函数
scanf
函数用于读取格式化输入。通过格式控制符%s
可以读取字符串,存储在指定的字符数组中。
#include <stdio.h>
int main() {
char str[100];
char *ptr = str;
printf("Enter a string: ");
scanf("%s", ptr);
printf("You entered: %sn", ptr);
return 0;
}
需要注意的是,scanf
函数会以空白字符(空格、制表符、换行符等)作为分隔符,只能读取一个单词。如果需要读取包含空格的字符串,可以使用gets
或fgets
函数。
2、gets函数
gets
函数用于读取一行输入,包括空格在内,直到遇到换行符为止。读取的字符串存储在指定的字符数组中。
#include <stdio.h>
int main() {
char str[100];
char *ptr = str;
printf("Enter a string: ");
gets(ptr);
printf("You entered: %sn", ptr);
return 0;
}
需要注意的是,gets
函数不安全,可能导致缓冲区溢出,建议使用更安全的fgets
函数。
3、fgets函数
fgets
函数用于从标准输入读取指定长度的字符串,存储在指定的字符数组中。它不仅可以读取包含空格的字符串,还能防止缓冲区溢出。
#include <stdio.h>
int main() {
char str[100];
char *ptr = str;
printf("Enter a string: ");
fgets(ptr, sizeof(str), stdin);
printf("You entered: %sn", ptr);
return 0;
}
在上述代码中,fgets
函数从标准输入读取最多sizeof(str) - 1
个字符,并将其存储在字符数组中。
三、使用动态内存分配
在某些情况下,字符数组的大小在编译时无法确定,可以使用动态内存分配来分配字符数组,并用指针指向分配的内存。
#include <stdio.h>
#include <stdlib.h>
int main() {
char *ptr = (char *)malloc(100 * sizeof(char)); // 动态分配内存
if (ptr == NULL) {
printf("Memory allocation failedn");
return 1;
}
printf("Enter a string: ");
fgets(ptr, 100, stdin);
printf("You entered: %sn", ptr);
free(ptr); // 释放动态分配的内存
return 0;
}
在上述代码中,malloc
函数动态分配100个字符的内存,并用指针ptr
指向这块内存。通过fgets
函数读取字符串并存储在动态分配的内存中,最后使用free
函数释放内存。
四、字符串操作函数
C语言提供了丰富的字符串操作函数,可以使用指针方便地操作字符串。
1、strlen函数
strlen
函数用于计算字符串的长度,不包括终止字符