gpt4 book ai didi

c - 如何在不使用 strcpy 的情况下将字符数组复制到 char 指针

转载 作者:行者123 更新时间:2023-11-30 20:34:35 26 4
gpt4 key购买 nike

如何在不手动使用 strcpy 的情况下将 char 数组的字符复制到 char 指针中。例如:

char *Strings[NUM];
char temp[LEN];
int i;
for (i = 0; i < NUM; i++){
fgets(temp, LEN, stdin);
Strings[i] = malloc(strlen(temp)+1);
Strings[i] = temp; // What would go here instead of this,
// because this causes this to happen->
}
Input:
Hello
Whats up?
Nothing

Output (when the strings in the array of char pointers are printed):
Nothing
Nothing
Nothing

我不知道如何解决这个问题。

最佳答案

在您的示例中,您使用这两行:

Strings[i] = malloc(strlen(temp)+1);    /* you should check return of malloc() */
Strings[i] = temp;

这是不正确的。第二行只是覆盖从malloc()返回的指针。 。您需要改为使用 strcpy() 来自<string.h> :

Strings[i] = malloc(strlen(temp)+1);    
strcpy(Strings[i], temp);

char *strcpy(char *dest, const char *src) copies the string pointed to, from src to dest. dest is the destination, and src is the string to be copied. Returns a pointer to dest.

您也没有检查 fgets() 的返回,返回 NULL失败时。您还应该考虑删除 \n附加字符 fgets() ,作为您复制到 Strings[i] 的字符串将有一个尾随换行符,这可能不是您想要的。

由于另一个答案显示了如何手动执行此操作,您可能还想考虑仅使用 strdup() 为您复印。

strdup() returns a pointer to a new string which is duplicate of string str. Memory is obtained from malloc(), and deallocated from the heap with free().

这里是一些执行额外错误检查的示例代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LEN 3
#define BUFFSIZE 20

int main(void) {
char *strings[LEN] = {NULL};
char buffer[BUFFSIZE] = {'\0'};
size_t slen, strcnt = 0, i;

printf("Input:\n");
for (i = 0; i < LEN; i++) {
if (fgets(buffer, BUFFSIZE, stdin) == NULL) {
fprintf(stderr, "Error from fgets()\n");
exit(EXIT_FAILURE);
}

slen = strlen(buffer);
if (slen > 0 && buffer[slen-1] == '\n') {
buffer[slen-1] = '\0';
} else {
fprintf(stderr, "Too many characters entered\n");
exit(EXIT_FAILURE);
}

if (*buffer) {
strings[strcnt] = strdup(buffer);
if (strings[strcnt] == NULL) {
fprintf(stderr, "Cannot allocate buffer\n");
exit(EXIT_FAILURE);
}
strcnt++;
}
}

printf("\nOutput:\n");
for (i = 0; i < strcnt; i++) {
printf("%s\n", strings[i]);
free(strings[i]);
strings[i] = NULL;
}
return 0;
}

关于c - 如何在不使用 strcpy 的情况下将字符数组复制到 char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42145593/

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