CAPL内置的与String有关函数

CAPL内置的与String有关函数

在CAPL中我们要经常和字符串打交道,为了方便的写CAPL脚本,所以我整理了Vector官方提供的与String有关的函数,并对常用的进行简单说明。

本文绝大部分摘录自Vector的官方文档,只是做了整理与翻译; 另外增加了一些我的理解。

一、CAPL中与String有关的函数

1.1 字符串字面量(String Literal)

字符串字面量(string literal) 是一个带引号的字符串, 比如: “This is a character string”

注意:

与C语言中一样,当在char数组(char arrays) 中存储字符串字面量(string literals) 时,数组末尾的一个char需要为字符串终止字符(/0)保留,即char数组需要比纯字符串长度长一个元素。

转义序列

某些字符显示为字符串中带有前反斜杠(转义序列)的字符组合,例如:

DescriptionDisplay Inside Character Strings
New line (新的一行)\n
Tabulator (制表符)\t
Backslash (反斜线)\\
Carriage return (回车)\r
Backspace (退格符)\b
Double quotation mark (双引号)\"
Single quotation mark (单引号)\'

1.2 常用字符串函数

Windows和Linux支持这些CAPL功能。Linux下的功能尚未经过全面测试。

第一部分:

FunctionsShort Description
_atoi64Converts a string to a 64bit integer.
_gcvtConverts a number to a string.
atodblConverts a string into a double number.
atolConverts a string to a LONG number.
ConvertStringConverts a string from one encoding to another encoding.
DecodeStringDecodes the byte array input from the encoding codepage.
EncodeStringEncodes the string input with the encoding codepage.
ltoaConverts a number to a string.

第二部分:

FunctionsShort Description
mbstrlen返回字符串的长度(位置以字符(characters) 为单位)
mbstrncmp比较两个字符串(位置以字符(characters) 为单位)
mbstrncmp_off比较两个字符串(位置以字符(characters) 为单位),可以指定偏移量
mbstrncpy将一个字符串复制到另一个字符串(位置以字符为单位)
mbstrncpy_off将一个字符串复制到另一个字符串(位置以字符为单位),可以指定偏移量
mbstrstr在另一个字符串中搜索一个字符串(位置以字符为单位)
mbstrstr_off在另一个字符串中搜索一个字符串(位置以字符为单位),可以指定偏移量
mbsubstr_cpy将一个子字符串复制到另一个字符串(位置以字符为单位)
mbsubstr_cpy_off将一个子字符串复制到另一个字符串(位置以字符为单位),可以指定偏移量

第三部分:

FunctionsShort Description
snprintf将格式化的字符串打印为字符数组(character array)
strlen获取字符串的长度(位置以字节(bytes) 为单位)
strncat将一个字符串追加到另一个字符串
strncmp比较两个字符串(位置以字节(bytes) 为单位)
strncmp_off比较两个字符串(位置以字节(bytes) 为单位),可以指定偏移量
strncpy将一个字符串复制到另一个字符串(位置以字节为单位)
strncpy_off将一个字符串复制到另一个字符串(位置以字节为单位),可以指定偏移量
strstr在另一个字符串中搜索一个字符串(位置以字节为单位)
strstr_off在另一个字符串中搜索一个字符串(位置以字节为单位),可以指定偏移量
strtod将字符串转换为浮点数
strtol将字符串转换为32位整型(integer)
strtoll将字符串转换为64位整型(integer)
strtoul将字符串转换为无符号32位整型(integer)
strtoull将字符串转换为无符号64位整型(integer)

第四部分:

FunctionsShort Description
substr_cpy将一个子字符串复制到另一个字符串(位置以字节为单位)
substr_cpy_off将一个子字符串复制到另一个字符串(位置以字节为单位),可以指定偏移量
str_match_regex检查字符串是否与正则表达式模式完全匹配
str_replace将字符串中出现的所有文本替换为另一个字符串。将字符串的一部分替换为另一个字符串。
str_replace_regex将字符串中出现的所有模式替换为另一个字符串
strstr_regex在字符串中使用正则表达式模式进行搜索
strstr_regex_off在字符串中使用正则表达式模式进行搜索,可以指定偏移量
toLower将字符或字符串转换为小写
toUpper将字符或字符串转换为大写
字符(character)与字节(bytes)的关系

根据字符串编码(string encoding)规则,一个字符(character) 可能需要几个字节(bytes),例如Windows ANSI(932)编码中的日语字符或UTF-8编码中的任何特殊字符。

使用说明:

  • 如果你使用标准的ASCII表中的字符,可以使用以str开头的函数, 它们全部以字节(byte) 为单位
  • 如果你需要使用特殊字符(如:不在ASCII表中的字符), 你应该使用以mb开头的函数进行代替,它们全部以字符(character) 为单位,适用于这种特殊编码的情况 。

二、 字符串长度

这里主要介绍 strlen()mbstrlen()elCount()三个函数

2.1 函数: strlen()mbstrlen()

  • strlen() 函数的名称应该是: string(字符串) + length(长度) 的缩写
  • mbstrlen() 函数的名称应该是: MultiByte(多字节) + string(字符串) + length(长度) 的缩写
函数语法
long strlen(char s[]);    // 获取单字节字符串长度

long mbstrlen(char s[]);  // 获取多字节字符串长度
函数参数说明

入参s, 代表的是需要获取长度的字符串对象s

函数功能描述
  • strlen() 函数的返回值是入参(字符串s)的长度(以字节(bytes) 为单位)
  • mbstrlen() 函数的返回值是入参(字符串s)的长度(以字符(characters) 为单位)
举例说明

关于strlen()elCount() 的示例代码:

long length;
char buffer[100] = "CANalyzer";
write("strlen:%d",strlen(buffer));    // 结果是strlen:9
write("elCount:%d",elCount(buffer));  // 结果是elCount:100

关于mbstrlen()strlen() 的示例代码:

long length;
char s1[10] = "door";
char s2[10] = "Tür";
write("%d %d", mbstrlen(s1), strlen(s1)); // 4 4   因为这里都是标准的ASCII字符,所以1个字符占1个Byte
write("%d %d", mbstrlen(s2), strlen(s2)); // 3 [3 or 4 depending on file encoding]  这里用了非标准字符

2.2 函数: elCount()

函数的名称应该是: elements(元素) + count(计数) 的缩写

函数语法
long elcount(...); // if used with arrays which are function parameters

dword elcount(...); // in all other cases
函数参数说明

任意类型的数组(array), 因此这个函数不止可以用在string中。

函数功能描述

确定数组(array) 的元素个数

返回值介绍

元素的个数

举例说明

关于elCount() 的示例代码:

void bsp(int ar[]) {
  int i;
  for(i=0; i < elCount(ar); i++)
    ...
}

void bsp2(byte ar[][]) {
  int i, j;
  for(j=0; j < elCount(ar); j++ )
    for(i=0; i<= elCount(ar[j]); i++ )
      ...
}

三、 比较两个字符串

这里主要介绍 strncmp() /strncmp_off()mbstrncmp()/ mbstrncmp_off()四个函数,它们的作用类似,主要是在类型、是否偏移上存在不同点。

3.1 函数: strncmp()

strncmp()函数的名称应该是: string(字符串) + compare(比较) 的缩写

函数语法
long strncmp(char s1[], char s2[], long len); // form 1

long strncmp(char s1[], char s2[], long s2offset, long len); // form 2
函数参数说明
参数参数含义
s1First string
s2Second string
s2offsets2中的偏移量(以bytes为单位)
len要比较的最大字节数(bytes)
函数功能描述

此函数将s1s2进行比较,最多可使用len个字符。

form 2的比较从s2s2offset处开始。

返回值介绍
返回值返回值说明
-1if s1 is less than s2(字符串s1小于s2)
1if s2 is less than s1(字符串s2小于s1)
0if the strings are equal(两个字符串相同)
举例说明

关于strncmp() 的示例代码:

on key 's'
{
  char s1[7] = "Vector";
  char s2[7] = "Vector";
  char s3[8] = "Vector";
  if(strncmp(s1,s2,strlen(s1)))
    write("compare s1, s2, result: not equal");
  else
    write("compare s1, s2, result: equal");
  
  if(strncmp(s1,s3,strlen(s1)))
    write("compare s1, s3, result: not equal");
  else
    write("compare s1, s3, result: equal");
}

输出结果:

Program / Model	compare s1, s2, result: equal
Program / Model	compare s1, s3, result: equal

3.2 函数: strncmp_off()

strncmp_off()函数的名称应该是: string(字符串) + compare(比较) + offset(偏移) 的缩写

函数语法
long strncmp_off(char s1[], long s1offset, char s2[], long s2offset, long len);
函数参数说明
参数参数含义
s1First string
s2Second string
s1offset字符串s1中的偏移量(以bytes为单位)
s2offset字符串s2中的偏移量(以bytes为单位)
len要比较的最大字节数(bytes)
函数功能描述

此函数将s1s2进行比较,最多可使用len个字符。

比较从: s1s1offsets2s2offset 位置处开始。

返回值介绍
返回值返回值说明
-1if s1 is less than s2(字符串s1小于s2)
1if s2 is less than s1(字符串s2小于s1)
0if the strings are equal(两个字符串相同)
举例说明

关于strncmp_off() 的示例代码:

char s1[18] = "Vector Informatik";
char s2[11] = "Informatik";
if (strncmp_off(s1, 7, s2, 0, strlen(s2)) == 0)
   write("Equal!");
else
   write("Unequal!");

这个输出的结果是“Equal!”

3.3 函数: mbstrncmp()mbstrncmp_off()

函数语法
long mbstrncmp(char s1[], char s2[], long len); // form 1

long mbstrncmp(char s1[], char s2[], long s2offset, long len); // form 2

long mbstrncmp_off(char s1[], long s1offset, char s2[], long s2offset, long len); // form 3
函数参数说明
参数参数含义
s1First string
s2Second string
len要比较的最大字符数(characters)
s1offsets1中的偏移量(以字符(characters) 为单位)
s2offsets2中的偏移量(以字符(characters) 为单位)
函数功能描述

此函数将s1s2 进行比较,最多可使用len 个字符。

比较从: s1s1offsets2s2offset 位置处开始。

返回值介绍
返回值返回值说明
-1if s1 is less than s2(字符串s1小于s2)
1if s2 is less than s1(字符串s2小于s1)
0if the strings are equal(两个字符串相同)
举例说明

关于mbstrncmp_off() 的示例代码:

char s[50] = "'Tür' is the german word for 'door'.";
write("%d", mbstrncmp_off(s, 13, "german", 0, 6));     // 0  采用了form 3

四、 字符串拼接、拷贝

这里主要介绍以下三类函数:

  • 拼接:strncat()
  • 拷贝: strncpy()strncpy_off()mbstrncpy()mbstrncpy_off()
  • 拷贝:substr_cpy()substr_cp_off()mbsubstr_cpy()mbsubstr_cpy_off()

4.1 函数: strncat()

strncat()函数的名称应该是: string(字符串) + number(个数) + concatenate(连接) 的缩写

函数语法
void strncat(char dest[], char src[], long len);
函数参数说明
参数参数含义
destTarget string to which characters are appended.
srcAppended string.
lenMaximum length of composite string including terminating ‘\0’.
函数功能描述

此函数将src附加到dest。len表示添加后的字符串的最大长度。该函数可确保存在一个终止的“\0”。

因此,最多可以复制 len - strlen(dest) - 1 个字符。

注意:

与C语言中的strncat函数不同,len表示添加后的字符串的最大长度,包括终止的“\0”,而不是要附加的字符数。

举例说明

关于strncpy()strncat()的示例代码:

char s[20];
strncpy(s, "Vector", 10); // s is "Vector"
strncat(s, " CANoe", 19); // s is "Vector CANoe"
strncpy(s, "Vector", 10); // s is "Vector"
strncat(s, " CANoe", 11); // s is "Vector CAN"

4.2 函数: strncpy()strncpy_off()

strncpy()函数的名称应该是: string(字符串) + number(个数) + copy(拷贝) 的缩写

函数语法
void strncpy(char dest[], char src[], long max);

void strncpy_off(char dest[], long destOffset, char src[], long max);
函数参数说明
参数参数含义
destDestination buffer(目标缓冲区)
destOffsetOffset in destination buffer(目标缓冲区中的偏移量)
srcSource string
max用于确定复制的最大字节数。不得大于dest的大小。最多复制max-1个字节。如果src短于此,则会继续复制,直到遇到终止的“\0”为止。
函数功能描述
  • strncpy函数将src复制到destmax表示dest的大小(以Byte为单位)。该函数可确保存在一个终止的“\0”。因此,最多可复制 max-1 个字节。
  • strncpy_off函数的max表示dest的大小(以Byte为单位)。该函数可确保存在一个终止的“\0”。因此,最多可复制max-1-destOffset字节。从destOffset开始,dest中的字节被覆盖。
举例说明

关于strncpy()strncpy_off()的示例代码:

variables {
   char s1[7] = "Vector";
   char s2 [32];
}
on key 'z'
{                                 // Output to the Write-Window:
   strncpy (s2,s1,elcount(s2));
   write ("Result: %s",s2);       // Result: Vector
}

char s[6] = "Hello";
strncpy_off(s, 1, "e", elcount(s)); // s: He

4.3 函数: mbstrncpy()mbstrncpy_off()

mbsubstr_cpy()函数的名称应该是: MultiByte(多字节) + string(字符串) + number(个数) + copy(拷贝) 的缩写

函数语法
void mbstrncpy(char dest[], char src[], long len);

void mbstrncpy_off(char dest[], long destOffset, char src[], long len);
函数参数说明
参数参数含义
destDestination buffer(目标缓冲区)
srcSource string
len要复制的字符数(characters),如果输入-1则尽可能多地复制
destOffset目标缓冲区的字符数(characters) 偏移量
函数功能描述
  • mbstrncpy函数将src复制到destlen表示应复制的字符数;使用-1表示应尽可能多地复制到dest中(最大值直到src结束)。该函数确保有一个终止的0字节;但与strncpy不同的是,该字节不计入len
  • mtrncpy_off从字符偏移destOffset开始覆盖目标缓冲区中的字符。
举例说明

关于mbstrncpy_off()的示例代码:

char s1[50] = "eine grüne "; // german for 'a green'
char s2[10] = "Türen"; // german for 'doors'
mbstrncpy_off(s1, 11, s2, 3);
write("%s", s1); // eine grüne Tür (german for 'a green door')

4.4 函数: substr_cpy()substr_cpy_off()

substr_cpy()函数的名称应该是: Sub…(子) + string(字符串) + copy(拷贝) 的缩写

函数语法
void substr_cpy(char dest[], char src[], long srcStart, long len, long max);

void substr_cpy_off(char dest[], long destOffset, char src[], long srcStart, long len, long max);
函数参数说明
参数参数含义
destDestination buffer(目标缓冲区)
destOffsetOffset in bytes in destination buffer(目标缓冲区中的偏移量, 以bytes为单位)
srcSource string
srcStartStart index in bytes in src of substring
lenLength of the substring in bytes, or -1 to copy the string until the end
maxSize of dest in bytes
函数功能描述
  • substr_cpy函数将src的子字符串复制到destmax表示dest的大小(以字节为单位)。该函数可确保存在一个终止的“\0”。因此,最多可复制max-1个字节。
  • substr_cpy_off函数的max表示dest的大小(以字节为单位)。该函数可确保存在一个终止的“\0”。因此,最多可复制max-1-destOffset字节。从destOffset开始,dest中的字节被覆盖。
举例说明

关于substr_cpy()substr_cpy_off() 的示例代码:

char s1[7];
char s2[18] = "Vector Informatik";
substr_cpy(s1, s2, 0, 6, elcount(s1)); // s1: Vector

char s1[9] = "New CAPL";
char s2[18] = "Vector Informatik";
substr_cpy_off(s2, 7, s1, 4, -1, elcount(s2)); // s2: Vector CAPL

4.5 函数: mbsubstr_cpy()mbsubstr_cpy_off()

mbsubstr_cpy()函数的名称应该是: MultiByte(多字节) + Sub…(子) + string(字符串) + copy(拷贝) 的缩写

函数语法
void mbsubstr_cpy(char dest[], char src[], long srcStart, long len);

void mbsubstr_cpy_off(char dest[], long destOffset, char src[], long srcStart, long len);
函数参数说明
参数参数含义
destDestination buffer(目标缓冲区)
srcSource string
srcStartStart index in characters in src of substring
len要复制的字符数(characters),输入-1表示尽可能多地复制
destOffset目标缓冲区中的偏移量(以characters 为单位)
函数功能描述
  • mbsubstra_cpysrc的子字符串复制到destlen表示应复制的字符数;使用-1表示应尽可能多地复制到dest中(最大值直到src结束)。该函数确保有一个终止的0字节;但与substra_cpy/substra_cpy_off相反,该字节不计入len
  • mbsubstra_cpy_off从字符偏移destOffset开始覆盖目标缓冲区中的字符。
举例说明

关于mbsubstr_cpy_off() 的示例代码:

char s1[50] = "eine grüne "; // german for 'a green'
char s2[20] = "schöne Türen"; // german for 'beautiful doors'
mbsubstr_cpy_off(s1, 11, s2, 7, 3);
write("%s", s1); // eine grüne Tür (german for 'a green door')

五、 字符串搜索、匹配

这里主要介绍以下三类函数:

  • 普通搜索: strstr()strstr_off()mbstrstr()mbstrstr_off()
  • 正则搜索:strstr_regex()strstr_regex_off()
  • 正则匹配: str_match_regex()

5.1 函数: strstr()strstr_off()

strstr()函数的名称应该是: string(字符串) + in(在…内) + string(字符串) 缩写

函数语法
long strstr(char s1[], char s2[]);

long strstr_off(char s1[], long offset, char s2[]);
函数参数说明
参数参数含义
s1First string
s2Second string
offsets1的这个偏移量【以字节(bytes)为单位】处开始搜索
函数功能描述

在字符串s1中搜索字符串s2

函数返回值描述
  • 如果在字符串s1中找到字符串s2, 则返回找到的第一个位置
  • 如果在字符串s1中未找到字符串s2,则返回值为 -1
举例说明

关于strstr() 的示例代码:

long pos;
char s1[18] = "Vector Informatik";
char s2[11] = "Informatik";
pos = strstr(s1, s2); // pos = 7

5.2 函数: mbstrstr()mbstrstr_off()

strstr()函数的名称应该是: MultiByte(多字节) + string(字符串) + in(在…内) + string(字符串) 缩写

函数语法
long mbstrstr(char s1[], char s2[]);

long mbstrstr_off(char s1[], long offset, char s2[]);
函数参数说明
参数参数含义
s1First string
s2Second string
offsets1的这个偏移量【以字符(characters) 单位】处开始搜索
函数功能描述

在字符串s1中搜索字符串s2

函数返回值描述
  • 如果在字符串s1中找到字符串s2, 则返回找到的第一个位置
  • 如果在字符串s1中未找到字符串s2,则返回值为 -1
举例说明

关于mbstrstr() 的示例代码:

long pos;
char s[50] = "'Tür' is german for 'door'";
pos = mbstrstr(s, "german");
write("%d", pos); // 9

5.3 函数: strstr_regex()strstr_regex_off()

函数语法
long strstr_regex(char s[], char pattern[]);

long strstr_regex_off(char s[], long offset, char pattern[]);
函数参数说明
参数参数含义
sString to be searched.
offset在s参数的偏移处(offset)开始搜索
pattern搜索的正则表达式; 对于正则表达式,使用与Perl编程语言相同的语法
函数功能描述

在字符串中使用正则表达式模式进行搜索

函数返回值描述
  • 如果在字符串s1中找到正则表达式模式, 则返回找到的第一个位置
  • 如果在字符串s1中未找到正则表达式模式,则返回值为 -1
举例说明

关于strstr_regex()strstr_regex_off()的示例代码:

char buffer[70] = "Vector Informatik";
long res;
res = strstr_regex(buffer, "Inf[a-z]*"); // 7
res = strstr_regex_off(buffer, res + 1, "Inf[a-z]*"); // -1

5.4 函数: str_match_regex()

函数语法
long str_match_regex(char s[], char pattern[]);
函数参数说明
参数参数含义
sString to be checked.
pattern进行字符串匹配的正则表达式;对于正则表达式,使用与Perl编程语言相同的语法。
函数功能描述

检查字符串是否与正则表达式模式完全匹配。

函数返回值描述
  • 如果字符串与正则表达式匹配成功,则为1;
  • 如果字符串与正则表达式匹配不成功,则为0。
举例说明

关于str_match_regex()的示例代码:

char buffer[70] = "Vector Informatik";
long res;
res = str_match_regex(buffer, "Vector [A-Za-z]*"); // 1
res = str_match_regex(buffer, "Inf[a-z]*"); // 0

六、 字符串替换

这里主要介绍以下两类函数:

  • 普通替换:str_replace()
  • 正则替换:str_replace_regex()

6.1 函数: str_replace()

函数语法
long str_replace(char s[], char searched[], char replacement[]); // form 1

long str_replace(char s[], long startoffset, char replacement[], long length); // form 2
函数参数说明
参数参数含义
s要修改的字符串(String)
searched应替换的文本(Text)
startoffset开始替换字符的偏移量
replacement替换原始字符的文本(Text)
length要替换的最大字符数(characters)
函数功能描述

形式1:将字符串中出现的所有文本替换为另一个字符串。
形式2:将字符串的一部分替换为另一个字符串。

函数返回值描述
  • 如果替换成功,则为1
  • 如果结果字符串对于缓冲区s来说太长,则为0
举例说明

关于str_replace()的示例代码:

char buffer[70] = "Vector Informatik";
str_replace(buffer, "Informatik", "CANoe");
write("buffer now is: %s", buffer);   // 输出结果: buffer now is: Vector CANoe
str_replace(buffer, 7, "CANalyzer", 10);
write("buffer now is: %s", buffer);   // 输出结果: buffer now is: Vector CANalyzer

6.2 函数: str_replace_regex()

函数语法
long str_replace_regex(char s[], char pattern[], char replacement[]);
函数参数说明
参数参数含义
s要修改的字符串(String)
pattern正则表达式,用于确定s中应替换的部分;对于正则表达式,使用与Perl编程语言相同的语法
replacementReplacement for the parts which match the pattern.
函数功能描述

形式1:将字符串中出现的所有文本替换为另一个字符串。

形式2:将字符串的一部分替换为另一个字符串。

函数返回值描述

如果成功,则为1,如果结果字符串对于缓冲区s来说太长,则为0

举例说明

关于str_replace_regex()的示例代码:

char buffer[70] = "Vector Informatik";
str_replace_regex(buffer, "Inf[a-z]*", "CANoe");
write(buffer);      // 输出结果:Vector CANoe

七、 字符串其他常用函数

由于CAPL是一种类C的语言,为了说明部分函数,所以我们要先介绍该函数在C语言中的实现。

7.1 C语言中的 sprintf()snprintf()

在C语言中sprintf()函数与snprintf()函数的语法如下:

int sprintf ( char * str, const char * format, ... );

int snprintf ( char * s, size_t n, const char * format, ... );
函数功能描述

在C语言中sprintf()函数的功能:

Write formatted data to string
使用与printf()上使用format时打印的文本相同的文本编写字符串,但内容不是打印的,而是以C字符串的形式存储在参数str指向的缓冲区中。
缓冲区(buffer)的大小应该足够大,可以包含整个结果字符串(请参阅snprintf以获得更安全的版本)。
在写入的内容之后会自动附加一个终止的空字符。
format参数之后,函数需要至少与格式化所需的附加参数一样多。

在C语言中snprintf()函数的功能:

Write formatted output to sized buffer

使用与printf上使用format时打印的文本相同的文本编写一个字符串,但内容不是打印的,而是以C字符串的形式存储在s指向的缓冲区中(取参数n作为要填充的最大缓冲区容量)。
如果生成的字符串长度超过n-1个字符,则会丢弃剩余的字符并不对其进行存储,而是根据函数返回的值进行计数。
在写入的内容之后会自动附加一个终止的空字符。
在format参数之后,函数需要至少与格式化所需的附加参数一样多。

举例说明

关于sprintf() 的示例代码:

/* sprintf example */
#include <stdio.h>

int main ()
{
  char buffer [50];
  int n, a=5, b=3;
  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
  printf ("[%s] is a string %d chars long\n",buffer,n);
  return 0;
}

输出结果:

[5 plus 3 is 8] is a string 13 chars long

关于snprintf() 的示例代码:

/* snprintf example */
#include <stdio.h>

int main ()
{
  char buffer [100];
  int cx;

  cx = snprintf ( buffer, 100, "The half of %d is %d", 60, 60/2 );

  if (cx>=0 && cx<100)      // check returned value

    snprintf ( buffer+cx, 100-cx, ", and the half of that is %d.", 60/2/2 );

  puts (buffer);

  return 0;
}

输出结果:

The half of 60 is 30, and the half of that is 15.

7.2 CAPL函数: snprintf()

snprintf()函数的名称应该是: string(字符串) + + number(个数) + printf(格式化打印) 的缩写

函数语法
long snprintf(char dest[], long len, char format[], ...);
函数参数说明
参数参数含义
dest要打印到的字符缓冲区(Character buffer)
len打印到缓冲区的最大字符数,包括终止的“\0”。最大为缓冲区的大小。
format打印到缓冲区的格式化字符串(Formatted string)

注意:

CAPL支持最多64个参数的函数调用。

函数功能描述

这个函数对应于C语言中的sprintf()/snprintf()函数, 详见上面介绍的C语言中的函数的功能。

函数返回值描述

写入的字符数

举例说明

关于snprintf() 的示例代码:

on key 'z'
{
  char buffer[100], str[7] = "Vector";
  long i;
  i = snprintf(buffer,elcount(buffer),"String: %s\n", str);
  write("Output:\n%s : Character count = %d\n", buffer, i);
}

输出结果:

Output:
String: Vector
 : Character count = 15

截图如下:
请添加图片描述

  • 2
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值