【发布时间】:2010-05-15 11:49:22
【问题描述】:
以下代码出现错误,我无法弄清楚。
char name[]="tolgahan"
char result[100]="";
strncat(result,name[1],1);
我想,我需要将 name[1] 转换为字符串格式,但我现在不知道该怎么做。
请帮助我。 最好的问候。
【问题讨论】:
-
你到底想做什么?您似乎正在尝试将名称的第二个字母复制到结果中。
以下代码出现错误,我无法弄清楚。
char name[]="tolgahan"
char result[100]="";
strncat(result,name[1],1);
我想,我需要将 name[1] 转换为字符串格式,但我现在不知道该怎么做。
请帮助我。 最好的问候。
【问题讨论】:
试试:
strncat(result, & name[1],1);
或
strncat(result, name + 1,1);
解释:C 中的字符串只是字符序列中第一个字符的地址(在内存中)。因此,如果您获取指针(使用 & 运算符或将初始指针加 1),您将得到一个从初始字符串的第二个字符开始的字符串。
【讨论】:
strncat 总是 NUL 终止。 strncpy 不做这样的保证。
表达式
name[1]
是一个字符 - 你想要一个指针:
strncat(result,name + 1,1);
【讨论】:
但是使用 strncat 复制 1 个字符是矫枉过正,而且不是很聪明。
在你的情况下,我会做更多这样的事情
char name[]="tolgahan";
char result[100]= "";
size_t l = 0;
result[l++] = name[1];
通过跟踪我的第一个字符串的长度,我可以避免隐藏的 strlen 调用(这就是 strncat 在内部所做的)。
result[l++] = 'H';
result[l++] = 'e';
result[l++] = 'l';
result[l++] = 'l';
result[l++] = 'o';
result[l++] = 0;
l 中的字符串的实际长度仍然存在,并且我避免了调用,编译器甚至可以在内部重新排列内容以使用更少的内存操作。
【讨论】: