我现在正在学习C,我仍然坚持这个问题。
Input: 'abc'
Output: 'aabbcc'
我坚持使用指针并增加大小缓冲区。见下文
编辑:添加了主()
#include <stdio.h>
#include <string.h>
int main()
{
char destValue[];
char srcValue[];
//User input
printf("Please enter valid text: " );
scanf("%s", srcValue);
//Copying to memory
memcpy(destValue, srcValue, strlen(srcValue)+1);
char lenghtOfText = strlen(srcValue);
for(int i = 0; i < lenghtOfText; i++) {
tempValue[i] = strcat(tempValue, srcValue);
}
}
每次运行我的代码时,它都会一直失败并且错误消息是Abort 6.在搜索时,他们说tempValue不会增加缓冲区的大小。
很抱歉,如果我的代码无效,我只是在学习C编程。感谢您的理解
答案 0 :(得分:2)
只需你可以这样做
#include<stdio.h>
#include<malloc.h>
#define len 10
int main()
{
char *destValue;
char *srcValue;
srcValue = malloc(len * sizeof(char));
destValue = malloc((2 * len * sizeof(char)) + 1);
//User input
printf("Please enter valid text: " );
scanf("%s", srcValue);
int j = 0;
for(int i = 0 ;srcValue[i]!= '\0';i++) {
destValue[j++]= srcValue[i];
destValue[j++]= srcValue[i];
}
destValue[j]='\0';
puts(destValue);
free(destValue);
free(srcValue);
return 0;
}
我希望你能得到这个。
答案 1 :(得分:1)
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[]) {
char* srcValue = "Hello World";
char* output = calloc(strlen(srcValue)*2+1, sizeof(char));
for (int i=0; i<strlen(srcValue); i++){
output[2*i] = srcValue[i];
output[2*i+1] = srcValue[i];
}
output[2*strlen(srcValue)] = '\0';
printf("%s\n", output);
return 0;
}
答案 2 :(得分:0)
destValue和srcValue本质上是指向char数组的指针。但是你没有为他们分配任何记忆。 scanf函数将尝试将输入的文本复制到初始化的内存位置。