过了一段时间我正在做c编程而且我遇到了问题。我需要在指针中附加字符,如下所示。
#include<stdio.h>
#define l "a"
#define lt "<aa>"
#include<string.h>
main()
{
char *st = (char*)malloc(sizeof(char));
//char st[10];
char *t = "abcdab";
char *m ="y";
while(*t)
{
if(*t == *l)
{
strcat(st, lt);
}
else
{
//strcat(st, m); //strcat works in this case, But i need replacement.
*st++ = *m; // How to make this line work to get desired output?
}
t++;
}
printf("%s\n", st);
}
正如所看到的代码由strcat工作。但是我不想在else块中使用strcat。 &LT; AA&GT; YYY&LT; AA&GT; Y。我的所需输出是否与else块中的strcat一起使用。但如果我使用“* st ++ = * m”,它只打印''。那么我需要添加什么来使其打印预期的输出?
答案 0 :(得分:1)
不确定为什么要这样做。无论如何,
char *st = (char*)malloc(sizeof(char));
不是你想要的。你应该从char st[100] = "";
开始。更准确地说,您需要找出原始字符串中的许多a
,以找出malloc
st
的正确大小。
我不会将#define
用于这些l
和lt
,const
会更好:
const char l = 'a';
const char lt[] = "<aa>";
if(*t == *l)
将为if(*t == l)
通过这些更改,*st++ = *m;
变为*(st + strlen(st)) = m;
,这应该会产生预期的输出。
答案 1 :(得分:1)
@Michi
"<aa>yyy<aa>y"
应该是输出。
您可以尝试这样的事情:
#include<stdio.h>
#include<stdlib.h>
char *foo(const char *src, const char ch){
char *dest = malloc(25 * sizeof(char*));
int i=0,j=0;
while(src[i] != '\0'){
if(src[i] == ch){
dest[j] = '<';
j++;
dest[j] = ch;
j++;
dest[j] = '>';
j++;
}
if(src[i] != ch){
dest[j] = 'y';
j++;
}
i++;
}
dest[j] = '\0';
return dest;
}
int main(void){
char *t = "abcdab";
char l = 'a';
char *arr = foo(t,l);
printf("%s\n",arr);
free(arr);
return 0;
}
输出:
<a>yyy<a>y
当然,您也可以在没有malloc
的情况下执行此操作:
#include<stdio.h>
void foo(const char *src, const char ch){
char dest[100];
int i=0,j=0;
while(src[i] != '\0'){
if(src[i] == ch){
dest[j] = '<';
j++;
dest[j] = ch;
j++;
dest[j] = '>';
j++;
}
if(src[i] != ch){
dest[j] = 'y';
j++;
}
i++;
}
dest[j] = '\0';
printf("%s\n",dest);
}
int main(void){
char *t = "abcdab";
char l = 'a';
foo(t,l);
return 0;
}