und*_*012 38 c string c-strings
我用C编写了这段小代码来测试C中的memcmp() strncmp() strcmp()函数.
这是我写的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *word1="apple",*word2="atoms";
if (strncmp(word1,word2,5)==0)
printf("strncmp result.\n");
if (memcmp(word1,word2,5)==0)
printf("memcmp result.\n");
if (strcmp(word1,word2)==0)
printf("strcmp result.\n");
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释我的差异,因为我对这三个功能感到困惑吗?
我的主要问题是我有一个文件,我在其中标记它的行,问题是,当我将文件中的"atoms"字标记时,我必须停止标记化的过程.
我第一次尝试strcmp()但不幸的是当它到达文件中放置"原子"这个词的时候它没有停止并且它继续,但当我使用它memcmp()或strncmp()它停止时我很高兴.
但后来我想,如果有一个字符串,其中前5个字母是a,t,o,m,s,并且这些字母后面跟着其他字母.
不幸的是,我的想法是正确的,因为我使用上面的代码测试它,通过初始化word1为"atomsaaaaa"和word2原子,memcmp()并strncmp()在if语句中返回0.另一方面,strcmp()它没有.似乎我必须使用strcmp().
Ada*_*eld 99
简而言之:
所以,如果你有这些字符串:
const char s1[] = "atoms\0\0\0\0"; // extra null bytes at end
const char s2[] = "atoms\0abc"; // embedded null byte
const char s3[] = "atomsaaa";
Run Code Online (Sandbox Code Playgroud)
然后这些结果成立:
strcmp(s1, s2) == 0 // strcmp stops at null terminator
strcmp(s1, s3) != 0 // Strings are different
strncmp(s1, s3, 5) == 0 // First 5 characters of strings are the same
memcmp(s1, s3, 5) == 0 // First 5 bytes are the same
strncmp(s1, s2, 8) == 0 // Strings are the same up through the null terminator
memcmp(s1, s2, 8) != 0 // First 8 bytes are different
Run Code Online (Sandbox Code Playgroud)
memcmp比较一些字节.
strcmp等比较字符串.
你在你的例子中作弊,因为你知道两个字符串都是5个字符长(加上空终止符).但是,如果你不知道琴弦的长度怎么办呢?好吧,你使用strcmp因为它知道如何处理字符串,memcmp不是.
memcmp就是比较字节序列.如果你知道每个字符串有多长,那么你可以memcmp用来比较它们,但是这种情况多久一次?很少.你经常需要字符串比较函数,因为......他们知道字符串是什么以及如何比较它们.
至于您遇到的任何其他问题,您的问题和代码都不清楚.请放心,尽管strcmp在字符串比较的一般情况下,它比较好memcmp.