相关疑难解决方法(0)

为什么memset采用int而不是char?

为什么memset采取int作为第二个参数,而不是一个char,而wmemset需要wchar_t的,而不是像longlong long

c memset

48
推荐指数
2
解决办法
5903
查看次数

创建strchr()的简化版本

试图创建一个简单的函数,在字符串中查找单个字符"就像strchr()会",我做了以下内容:

char* findchar(char* str, char c)
{
    char* position = NULL;
    int i = 0;
    for(i = 0; str[i]!='\0';i++)
    {
        if(str[i] == c)
        {
            position = &str[i];
            break;
        }
    }
    return position;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止它的作用.但是,当我看到strchr()的原型时:

char *strchr(const char *str, int c);
Run Code Online (Sandbox Code Playgroud)

第二个参数是int?我很想知道..为什么不是炭?这是否意味着我们可以像使用char一样使用int来存储字符?

这让我想到第二个问题,我试图改变我的函数接受一个int作为第二个参数......但我不确定这样做是否正确和安全:

char* findchar(char* str, int c)
{
    char* position = NULL;
    int i = 0;
    for(i = 0; str[i]!='\0';i++)
    {
        if(str[i] == c) //Specifically, is this line correct? Can we test an int against a char? 
        {
            position = …
Run Code Online (Sandbox Code Playgroud)

c

9
推荐指数
2
解决办法
1411
查看次数

为什么`strchr`似乎与多字节字符一起工作,尽管手册免责声明?

从:

man strchr
Run Code Online (Sandbox Code Playgroud)

char*strchr(const char*s,int c);

strchr()函数返回指向字符串s中第一次出现的字符c的指针.

这里"字符"表示"字节"; 这些函数不适用于宽字符或多字节字符.

如果我尝试搜索多字节字符é(0xC3A9在UTF-8中):

const char str[] = "This string contains é which is a multi-byte character";
char * pos = strchr(str, (int)'é');
printf("%s\n", pos);
printf("0x%X 0x%X\n", pos[-1], pos[0]); 
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

这是一个多字节字符

0xFFFFFFC3 0xFFFFFFA9

尽管有警告:

警告:多字符字符常量[-Wmultichar]

所以这是我的问题:

  • 这意味着什么不适strchr用于多字节字符?(它似乎工作,只要int类型足够大,包含你的多字节,最多4个字节)
  • 如何摆脱警告,即如何安全地恢复多字节值并将其存储在int中?
  • 为什么是前缀0xFFFFFF

c string wchar-t utf-8

4
推荐指数
1
解决办法
622
查看次数

数据类型为char,其值范围为0-255

我在查看链接数据类型的数据类型

它被写为char类型是1字节,范围是-128到127或0到255.

这怎么可能?默认char表示签名权限. 在此输入图像描述

编辑:还有一个问题这个C代码什么问题?.但这不是同一个问题.标题说这个代码有什么问题,搜索不会轻易列出这个答案.人们必须完全分析这个问题才能理解这个问题.

编辑:看了几个答案和评论后,我又有了疑问.双引号内的字符串被视为char.如果我将双引号字符串传递给具有signed char类型参数的函数,我会收到警告.itoa和许多其他库函数也使用char类型参数而不是signed char.当然,类型转换会避免这个问题.那么操作空终止字符串的函数的最佳参数类型是什么(例如LCD显示相关函数)?使用signed char或unsigned char(因为char是实现定义的,我猜它可能不是可移植的)

c mingw

-1
推荐指数
2
解决办法
929
查看次数

标签 统计

c ×4

memset ×1

mingw ×1

string ×1

utf-8 ×1

wchar-t ×1