所以我在做一個問題,我必須加入兩個零終止的字符串,第一個包含一個單詞,第二個是空的,兩倍於原始數組的大小。我可以用下面的代碼C++組合兩個零終止的字符串?
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
char str1[] = "test";
char str2[(sizeof(str1)-1)*2];
char *p;
int count = 0;
for(p = str1; *p != 0; p++) {
str2[count] = *p;
count++;
}
cout << str2;
}
得到這個工作但是我必須用一個函數的原型如下
char *combine(char *a);
所以,我想這個
#include <stdio.h>
#include <iostream>
using namespace std;
char *copy_and_reverse(char *a) {
char str2[8];
int count = 0;
char* b = str2;
for(a; *a != 0; a++) {
str2[count] = *a;
count++;
}
return b;
}
int main()
{
char str1[] = "test";
char *a;
a = str1;
char* b = copy_and_reverse(a);
for(b; *b != 0; b++) {
cout << *b;
}
}
但它確實不工作(它正在打印字符串,但它後面打印了一些隨機字符),我對指針感到困惑,任何人都可以幫我解決這個問題嗎?
編輯:這裏是我想回答
C++編寫一個函數,它作爲
char *
風格零結尾的字符串,並返回一個字符串char*
兩次輸入的長度的問題。返回的字符串的前半部分應包含原始數組內容的副本。字符串的後半部分應該以相反的順序包含原始字符串的內容。該函數應具有以下原型:
char *copy_and_reverse(char* a);
注意:你不應該使用任何庫函數(例如從
string.h
)。
您的問題描述不清楚。你有沒有兩個零終止的字符串。你的第一個代碼拷貝一個字符串(像'strcpy'),但不會終止結果,產生未定義的行爲。然後你說的是'combine'(不清楚應該做什麼),最後一個例子包含'copy_and_reverse'(在那裏沒有反轉)。你說你在做一個問題。練習的實際文字是什麼? – melpomene
除了'cout',這真的不是C++。這是C.你應該改變標籤。 – Charles
@ c650它是C++。 – melpomene