从现在开始
char tval[20] = "temp:26.62";
如何在填充
tval
之前添加空格字符?最终需要获得这样的结果:char tval[20] = "temp:26.62 ";
从现在开始
char tval[20] = "temp:26.62";
tval
之前添加空格字符?最终需要获得这样的结果:char tval[20] = "temp:26.62 ";
大概就像这样
size_t prevlen = strlen(tval);
memset(tval + prevlen, ' ', 19 - prevlen);
*(tval + 19) = '\0';
memset
调用要构造成这样。我很想点赞,但还无法证明它的正确性。 - ifconfigmemset(tval + prevlen, ' ', 19 - prevlen);
void *memset(void *s, int c, size_t n);
memset函数会将temp:26.62
后面的字节填充为空格,我们需要指定memset要填充多少个字节。这是通过计算19-prevlen
得出的。19而不是20意味着我们留了一个字节给\0
。 - Karthicktval [20]
是固定大小的,并且20
始终是该大小,则可以遍历数组并执行以下操作:char tval[20] = "temp:26.62";
tval [20]
看起来像这样:{'t','e','m','p',':','2','6','.','6','2','\0'}
剩余部分将填充为\0
现在可以进行迭代:
for (int i = 0; i < 19; i++)
{
if (tval[i] == '\0')
{
tval[i] = ' ';
}
}
tval[i] == ' ';
(请注意双等号)。 - George I.tval[19] = '\0';
终止符是多余的。 - this试试这个:
#include<stdio.h>
#include<string.h>
int main(void){
char tval[20] = "temp:26.62";
size_t length = strlen(tval);
printf("Length of TVAL Before = %zu\n", length);
while(length < 19){
tval[length] = ' ';
length++;
}
tval[19] = '\0';
printf("Length of TVAL After = %zu\n",length);
printf("TVAL = %s\n",tval);
return 0;
}
输出:
Length of TVAL Before = 10
Length of TVAL After = 19
TVAL = temp:26.62
你可以使用一个点来检查它:
#include<stdio.h>
#include<string.h>
int main(void){
char tval[20] = "temp:26.62";
size_t length = strlen(tval);
printf("Length of TVAL Before = %zu\n\n", length);
while(length < 19){
tval[length] = ' ';
length++;
}
tval[18] = '.';
tval[19] = '\0';
printf("TVAL = %s\n\n",tval);
printf("Length of TVAL After = %zu\n",length);
return 0;
}
输出:
Length of TVAL Before = 10
TVAL = temp:26.62 .
Length of TVAL After = 19
tval[19] = '\0';
终止符是多余的。 - thischar tval [] = {'H', 'e', 'l', 'l', 'o', '\ 0'};
对于特殊情况下的字符数组,我们可以使用更方便的引导方式,只需声明一个常量字符串即可:char tval [] = "Hello";
在[]初始化期间,计算机会自动保留链所需的字节数,即:字符数+1(这里是6个字节)。如果需要保留的字节数大于或等于初始化字符串的长度,我们也可以明确指定要保留的字节数。
char tval[20];
sprintf(tval,"%-*s",19,"temp:26.62");
...
或者
char tval[20] = "temp:26.62";
sprintf(tval,"%-*s",19,tval);