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;
}