C语言 字符串数组 的输入 总结

小白见解,有问题请批评指正

1.字符串数组的定义

char *str[] = { };
每个元素都是指针,指向存储空间中的某个字符串
取其中的值的时候直接用str[i]来取
//上面的内容使用注释的话就看不清字了

2.输入的思路

  • 定义字符串数组长度(这个没办法完全动态)
  • 定义一个用于输入的随机字符串,并malloc申请空间,空间的长度也需要人为定义(没办法动态)
  • 循环输入
  • 设定:输入为回车的时候自动跳出

3.重点

  • 对scanf()函数输入回车,它会直接停止读入,并且丢掉这个回车,使得下一步判断都不能继续,
    所以改用get()

  • 字符串的写入,我个人认为先写进一个临时字符串,再用strcpy()拷贝更稳妥

3.代码实现

#include 
#include 
#include 

int main(int argc, char const* argv[])
{
	char* strArr[100];	//多少个元素
	char* tempstr;
	tempstr = (char*)malloc(100 * sizeof(char));
	//每个元素的字符串长度(包括'\0')
	int count = 0;
	for (int i = 0; i < 100; i++, count++)
	{
		strArr[i] = (char*)malloc(100 * sizeof(char));//与tempstr申请相同的空间长度
		//scanf("%s", tempstr);
		gets(tempstr);
		//如果用scanf,下面的strlen是输出不出来的,不知道为什么
		if (strlen(tempstr) == 0)
		{
			free(strArr[i]);//因为没有进行下面的拷贝,申请的这一小块空间也要free
			break;
		}
		strcpy(strArr[i], tempstr);
		//printf("%d\n", strlen(strArr[i]));
		//printf("%s\n", strArr[i]);
	}
	free(tempstr);
	for (int i = 0; i < count; i++)
	{
		printf("%s\n", strArr[i]);
	}
	return 0;
}

你可能感兴趣的:(C)