(一)C所遇到的问题——做C程序设计(第四版)课后题遇到的问题

1.获取字符指针所指字符串的长度

#include<string.h>
char *s = "asdfjasdlkfjalsjd";
int length = strlen (s);

2.warning:function returns address of local variable

自己写了一个局部函数时,如果函数类型有返回值的话,如果返回的是局部变量,则会弹出该警告,因为执行该函数,就会释放内存
引用来源:warning:function returns address of local variable
解决办法:(1) 将返回值声明为static, (2)malloc,记得free(3) 传入参数

3.gets()和puts()

gets函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原先的内容,破坏一个或多个不相关变量的值,为了避免这种情况,我们可以用fgets()来替换gets()。这个事实导致gets函数只适用于玩具程序。

4.关于字符串指针

char *str = "assdsd asdfe word wonderful";//如果不加\0的话,此字符串后面在内存中实际存储会有一个" String"后缀,也会被输出出来 

全部代码:

#include<stdio.h>
#include<string.h>
//写一个函数,输入一行字符,将此字符串中最长的单词输出(输入格式为单词之间用空格隔开)
int flag = 0;

char *chooseword(char *str)
{
	int i;
	int num = 0;
	static char *temp = NULL;
	int length = strlen(str);
//	printf("length = %d\n",length);
	for(i=0;i<length;i++)
	{
//		printf("%d\n",i);
		while(*(str+i)!=' ')
		{
			num++;
			i++;
//			printf("num++");
		}
		if(num>flag)
		{
			flag = num;
			temp = str+i-num;
			num = 0;			
		}
		else num = 0;
	}
	return temp;
}

int main()
{
	char *str = "assdsd asdfe word wonderful \0";
//	char *str = "assdsd asdfe word wonderful";//如果不加\0的话,此字符串后面在内存中实际存储会有一个" String"后缀,也会被输出出来 
	char *result = NULL;
	int i;
//	getchar();
//	gets(str);
	printf("String is :");
	puts(str);//含有换行符 
//	printf("\n");
	int length = strlen(str);
	printf("length = %d\n",length);
	result = chooseword(str);
	printf("The longest word is:\n");
	printf("flag is:%d\n",flag);
	for(i = 0;i<flag;i++)
	{
		printf("%c",*(result++));
	}
	printf("\n");
	return 0;
} 


发布了18 篇原创文章 · 获赞 1 · 访问量 998

猜你喜欢

转载自blog.csdn.net/weixin_43773038/article/details/103002496
今日推荐