c语言中需要注意的地方--(二)

1.strlen()与sizeof()

1、操作

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止。

而sizeof()返回的是变量声明后所占的内存数,不是实际长度。
2、参数类型

sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以’’\0’'结尾的。

3、类型

sizeof是操作符(关键字),strlen是函数。

char sArr[] = "ILOVEC";
/*用strlen()求长度*/
printf("sArr的长度=%d\n", strlen(sArr));

很显然,上面示例代码的运行结果为 6(因为不包括结束字符 null)

char sArr[] = "ILOVEC";
/*用sizeof求长度*/
printf("sArr的长度=%d\n", sizeof(sArr));

相对于函数 strlen,这里的示例代码运行结果为 7(因为它包括结束字符 null)。
3、注意:

1、strlen()函数的类型必须为char类型,而sizeof可以为任意类型
2、strlen()函数包含在string.h文件中

指针数组和数组指针

int *p1[5]; //指针数组
int (*p2)[5]; //数组指针

1. 指针数组

int *p1[5]; //指针数组

在这里插入图片描述

参考代码

#include <stdio.h>
 
const int MAX = 3;
 
int main ()
{
   int  var[] = {10, 100, 200};
   int i, *ptr[MAX];
 
   for ( i = 0; i < MAX; i++)
   {
      ptr[i] = &var[i]; /* 赋值为整数的地址 */
   }
   for ( i = 0; i < MAX; i++)
   {
      printf("Value of var[%d] = %d\n", i, *ptr[i] );
   }
   return 0;
}
/*输出一下结果
Value of var[0] = 10
Value of var[1] = 100
Value of var[2] = 200
*/
#include <stdio.h>
 
const int MAX = 4;
 
int main ()
{
   const char *names[] = {
                   "Zara Ali",
                   "Hina Ali",
                   "Nuha Ali",
                   "Sara Ali",
   };
   int i = 0;
 
   for ( i = 0; i < MAX; i++)
   {
      printf("Value of names[%d] = %s\n", i, names[i] );
   }
   return 0;
}
/*  输出一下结果
Value of names[0] = Zara Ali
Value of names[1] = Hina Ali
Value of names[2] = Nuha Ali
Value of names[3] = Sara Ali
*/

指针数组常用在主函数传参,在写主函数时,参数有两个,一个确定参数个数,一个这是指针数组用来接收每个参数(字符串)的地址

int main(int argc, char *argv[])

2. 数组指针

int (*p2)[5]; //数组指针

在这里插入图片描述

int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
 p=a;        //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
 p++;       //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
int arr[5]={1,2,3,4,5};
int (*p1)[5] = &arr;
/*下面是错误的*/
int (*p2)[5] = arr;
void fun(int (*P)[4]);//子函数中的形参,指针数组 

a[3][4] = {0};//主函数中定义的二维数组
fun(a);//主函数调用子函数的实参,是二维数组的首元素首地址
int (* arrPtr)[10] = NULL;   // 一个指针,它指向一个有10个int元素的数组
int matrix[3][10];            // 3行,10列的数组
                                    // 数组名称是一个指向第一个元素的指针,也就是第一行的指针
arrPtr = matrix;            // 使得arrPtr指向矩阵的第一行
(*arrPtr)[0] = 5;       // 将5赋值给第一行的第一个元素
arrPtr[2][9] = 6;           // 将6赋值给最后一行的最后一个元素
++arrPtr;                   // 将指针移动到下一行
(*arrPtr)[0] = 7;           // 将7赋值给第二行的第一个元素

在初始化赋值后,arrPtr 指向矩阵的第一个行,正如矩阵名称 matrix 一样。在这种情况下,使用 arrPtr 获取元素的方式与使用 matrix 完全一样。例如,赋值运算(*arrPtr)[0]=5 等效于 arrPtr[0][0]=5 和 matrix[0][0]=5。

然而,与数组名称 matrix 不同的是,指针名称 arrPtr 并不代表一个常量地址,如运算 ++arrPtr 所示,它进行了自增运算。这个自增运算会造成存储在数组指针的地址增加一个数组空间大小,在本例中,即增加矩阵一行的空间大小,也就是 10 乘以 int 元素在内存中所占字节数量。

参考文章:
1.指针数组和数组指针
2. 指针数组与数组指针详解
3. 数组指针和指针数组的区别,C语言数组指针和指针数组区别详解
4. 数组指针和指针数组的区别

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Keil C语言,可以使用特定的方法将UTF-8编码的文转换为可识别的形式。首先,我们需要将UTF-8编码的文数据存储在合适的变量(例如字符数组)。然后,可以使用一种编码转换的方法,将UTF-8编码的文转换为Unicode编码或其他适用的字符编码。 一种常用的方法是使用库函数,例如用于字符串处理的stdio.h和string.h库。通过这些库函数,可以使用特定的函数进行编码转换。例如,可以使用strncpy()函数将UTF-8编码的文复制到一个新的字符数组,然后将其显示出来。 另一种方法是使用Unicode转义序列,这是一种用于将Unicode字符插入到C字符串的方法。通过在字符串使用"\uXXXX"格式的转义序列,可以将相应的Unicode字符插入到字符串。例如,"\u4E2D\u6587"将显示为"文"。 需要注意的是,在任何编码转换过程,确保编码转换是正确的,以避免出现乱码或错误显示的情况。可以使用适合的库函数来进行验证和调整。 总之,在Keil C语言,可以通过使用库函数或Unicode转义序列来实现UTF-8文的转换和显示。具体的方法和函数取决于所使用的库和编码需求。 ### 回答2: 在Keil C语言,将UTF-8编码的文转换为可识别的文字符需要一些处理。首先,我们需要确保Keil C的编码设置为UTF-8,以便正确解析文字符。接下来,我们需要使用适当的函数来将UTF-8编码的字符转换为Unicode字符。 在Keil C语言,可以使用类似下面的代码片段来实现UTF-8到Unicode的文转换: ```c #include <stdio.h> int main() { char utf8[] = {0xE4, 0xBD, 0xA0, 0xE5, 0xA5, 0xBD, 0xE8, 0xAF, 0x95, 0xE6, 0xB1, 0x87, 0xE7, 0xA8, 0x8B, 0xE6, 0x88, 0x91, 0x00}; // UTF-8编码的文字符串 wchar_t unicode[10]; // 存储转换后的Unicode字符串 // 将UTF-8转换为Unicode swprintf(unicode, sizeof(unicode), L"%hs", utf8); // 输出转换后的Unicode字符串 wprintf(L"%ls\n", unicode); return 0; } ``` 上述代码,我们定义了一个UTF-8编码的文字符串`utf8`,然后使用`swprintf`函数将其转换为Unicode字符并存储在`unicode`数组。最后,通过`wprintf`函数将转换后的Unicode字符串输出。 需要注意的是,Keil C不直接支持文字符,因此我们需要使用宽字符类型`wchar_t`来存储Unicode字符,并使用`wprintf`函数来输出文字符。 希望以上内容对您有所帮助! ### 回答3: 在Keil C语言,可以使用以下步骤将UTF-8编码的文转换为汉字: 1. 首先,确保Keil C语言编译器支持UTF-8编码。可以在编译器的设置查看或配置编码选项。 2. 将UTF-8编码的文字符保存在源代码文件。 3. 在代码文件需要使用合适的函数或库来处理UTF-8编码的文字符。可以使用标准库函数来处理字符串,如strlen()和strcpy()等。 4. 为了正确显示文字符,需要在代码文件的开头添加编码声明,如“#pragma execution_character_set("utf-8")”等。 5. 在使用文字符的地方需要确保在合适的地方显示文字符,可以通过printf()函数或其他输出函数来实现。 需要注意的是,Keil C语言使用的是ASCII编码,而不是Unicode编码。因此,虽然可以使用UTF-8编码的文字符,但在Keil C语言并不直接支持Unicode字符集。在处理UTF-8编码的文字符时,可能需要先将其转换为Unicode编码,然后再进行相应的处理与显示。因此,在使用Keil C语言编写处理文字符的程序时,需要考虑适当的编码转换和处理方式,以确保正确地显示和处理文字符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值