gpt4 book ai didi

c - C 中的字符串指针打印奇怪的符号

转载 作者:行者123 更新时间:2023-11-30 18:25:05 25 4
gpt4 key购买 nike

在 char 数组前面动态插入一个字符后尝试打印字符串指针时遇到了一些困难。

参数 *str 是我的 main 中的动态字符数组,而输入是单个字符,应在执行 insert() 后附加到动态数组的第一个元素。

int main(){ 
//code snippet. I removed other part to keep the question short
printf("How many characters do you want to input: ");
scanf("%d", &n);
str = malloc(n + 1);
printf("Input the string class: ");
scanf("%s", str);

//switch statement
case '1':
printf("What is the character you want to insert: ");
scanf(" %c", &input);
insert(&str, input);
break;
}
return 0;
}

void insert(char *str, char input) {
char *new_str;
int i, len = strlen(str);

new_str = malloc(len + 1);
new_str[0] = input;
strncpy(&new_str[1], str, len - 1);
new_str[len] = 0;

for (i = 0; i < len; i++) {
printf("%c", new_str[i]);
}
}

当我尝试循环 new_str 并打印出字符串数组时,它给了我奇怪的符号,我不知道它们是什么。有什么想法吗?

编辑

预期输出如下:

How many characters do you want to input: 5
Input the string:datas
The string is: datas
Do you want to 1-insert or 2-remove or 3-quit?: 1
What is the character you want to insert: a
Resulting string: adata

我得到的输出:

enter image description here

最佳答案

替代版本,避免任何字符串复制功能。 (因为,更改 strlen() 您已经知道要复制的字符串长度,因此您不再需要任何其他字符串函数)

char * insert_a_character(char * str, char ch)
{
char * new;
size_t len;

if (!str) return NULL;
len = strlen(str);

new = malloc (1+len+1);
if (!new) retun NULL;

new[0] = ch;
memcpy(new+1, str, len);
new[len+1] = 0;

return new;
}

关于c - C 中的字符串指针打印奇怪的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com