d和c的符区别
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch[]="你好,世界!";
char *p;
p=&ch;
p++;
printf("%s\n", p);
return 0;
}
上为C版
,下为D
版:
module main;
import std.stdio;
int main(string[] args)
{
char[] ch="你好,世界!".dup;
char *p;
p=&ch[0];
p++;
writefln("%s", p);
return 0;
}
如下,与你一样:
import core.stdc.stdio;
void main()
{
const(char)[] ch = "你好,世界!";
const(char)* p;
p = &ch[0];
p++;
printf("%s", p);
}
用writefln
,再来:
import std;
import core.stdc.string;
void main()
{
const(char)[] ch = "你好,世界!";
const(char)[] ch2 = "abc";
const(char)* p;//串字面需要`const(char)`.
p = &ch[0];
p++;
auto str = p[0 .. strlen(p)];
writefln("%s", str);//writefln需要切片.
}
C和D
中的符*
无区别,只是writeln
与printf
的%s
有区别,文档
%s
来格式化
输出.对D串
,看到文本
.对整数或浮点
类型,会看到数字
.对指针
,会看到地址
等等.
示例中,要writefln
打印文本
而不是指针地址
,可导入std.string
并使用fromStringz(p)
.
对p
指向的任意不变切片.这给你D串
而不分配内存.如果想在指针
生命期外继续使用串,则必须使用std.conv.to
,而不是(如,to!string(p)
).
这是D
方法:
int main(string[] args)
{
string ch1 = "你好,世界!";
char[] ch2="你好,世界!".dup;
string s1=ch1[1..$];
char[] s2=ch2[1..$];
writeln(s1);
writeln(s2);
return 0;
}
如果,不返回char*
.可只使用writeln(p1);
来输出整个串
,或使用p1[0..$]
切片来取整个串,因而不必用strlen
.
strlen
仅适合以空字符(\0)
结尾的串.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现