【发布时间】:2014-09-09 02:14:48
【问题描述】:
C 不是托管语言,我已经有一段时间没有使用非托管语言了。我需要创建一个搜索字符数组的代码块,并将所有“2”实例替换为“Ba”。这很简单,除了现在生成的字符串将比原来的大,所以我需要以某种方式解释这一点,我不记得如何做到这一点。
这里是第 4 次尝试,使用指针:
//Move next 150 characters after replacing all 2 with Ba:
numberread = read(XYZFile, datatoreadWWW, sizeof(datatoreadWWW));
int y = strlen(datatoreadWWW); //should be 150.
int additionallength = y;
i = 0;
while(i < y) {
if(datatoreadWWW[i] == '2') {
additionallength++; //Since we need to replace any '2' with 'Ba', we should add one character for the a.
}
i++;
}
//And now use additionallength to create the new char array to be placed in WWW, called newstring:
char newstring[additionallength];
int j = 0;
const char *in = datatoreadWWW;
char *out = newstring;
while(*in) {
if (*in == '2') {
*out++ = 'B';
*out++ = 'a';
}
else {
*out++ = *in;
}
in++;
}
*out++ = '\0';
我仍然对此感到困惑/卡住,我将垃圾值写入 WWW 文件,例如“^Q”等。不知道这意味着什么,但它似乎不正确。
编辑: 上面的程序现在似乎可以运行了。问题是,如果有人将这篇文章作为资源阅读,我将 +1 添加到附加长度,但这发生在每次迭代中,所以每有这么多字符,文件中就会有一个额外的空白空间,这是不正确的。无论如何,我认为我们已经了解到,在使用 C 语言时检查指针很重要,因为这是完成此任务的最简单方法。
【问题讨论】:
-
“托管”或“非托管”与此无关。我认为您指的是缺少具有插入操作的标准容器。
-
'Ba'是一个 多字节字符常量 ,毕竟它仍然是一个字符。你真正想要的是两个字符,'B'和'a'。正如你所说,你需要有足够的空间,因为结果会比原来的大。尝试编写一些代码然后发布。 -
K 马特,等一下,我正在努力!
-
C 是一种托管语言,它只是开发人员(而不是运行时)进行管理:-)