前段时间,在做一个工程,里面写到一个传值函数,把char str[]传给参数char *str,然后利用strncmp比较某两个字符串大小进行相关操作,结果strncmp我是用sizeof来指定比较的字符串的字节数的,结果strncmp竟然一直没法正确判断,顿时我很吃惊,不知道哪里有问题,后来将sizeof(str)的值打出来看了一下,竟然不是字符串的字符个数,而是比起小很多地一个值。
于是将char *str和char str[]都赋成了“123456789”,结果,后面一个是正常的10个字节,前一个却只为4,后来仔细想了想,char *str的字节确实不应该为10,因为它是指向“123456789“这个字符串的指针,并不是这个字符串的本身,所以虽然它能表示该值,字节数却不是该值的字节数,于是果断把strncmp比较里的sizeof(str)改成strlen(str),因为在32为平台上,char是占一个字节的,所以strlen()的值就是该字符串的字节数。
另外要注意指针需有内存地址空间了才能被使用,光声明一下如char *str是不能被使用的。