我知道一点C,现在我正在看看C++.我习惯使用char数组来处理C字符串,但是当我看到C++代码时,我看到有使用字符串类型和字符串数组的示例:
#include <iostream>
#include <string>
using namespace std;
int main () {
string mystr;
cout << "What's your name? ";
getline (cin, mystr);
cout << "Hello " << mystr << ".\n";
cout << "What is your favorite team? ";
getline (cin, mystr);
cout << "I like " << mystr << " too!\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和
#include <iostream>
using namespace std;
int main () {
char name[256], title[256];
cout << "Enter your name: ";
cin.getline (name,256);
cout << "Enter your …Run Code Online (Sandbox Code Playgroud) 最近,我需要声明一个字符串数组,所以我写下了以下语句:
const char** directories = {"cricket_batting", "cricket_bowling", "croquet", "tennis_forehand", "tennis_serve", "volleyball_smash"};
Run Code Online (Sandbox Code Playgroud)
但是,g ++向我显示了错误:
error: scalar object ‘directories’ requires one element in initializer
Run Code Online (Sandbox Code Playgroud)
所以我把声明改为:
const char* directories[] = {"cricket_batting", "cricket_bowling", "croquet", "tennis_forehand", "tennis_serve", "volleyball_smash"};
Run Code Online (Sandbox Code Playgroud)
这一次,这是对的.但我不能确切地知道之间的区别char**和char[].
我读到了:
char a[] = "string";
Run Code Online (Sandbox Code Playgroud)
是 a: "string"
而
char *ptr = "string"
Run Code Online (Sandbox Code Playgroud)
是 ptr: [__] ---> "string"
我有点困惑.我知道的一件事是指针总是存储地址.在字符指针的情况下它存储了什么地址?这个块代表什么(我指向字符串的块).它是"字符串"的起始地址.
在阵列的情况下?如何清楚地区分char指针和char数组?
所以我一直在看大学关于C++的讲座,我学到了很多东西,但有一件事我还是听不懂:
为什么有时必须这样做?
char* test = "testing";
Run Code Online (Sandbox Code Playgroud)
从我读过/看过的内容来看,我只是不明白你为什么要这样做*.根据我的想法,我只*知道你有一个地址,但也许我只是错了.
为什么这段代码不起作用?
int main(){
char *str ="abcde";
scanf("%s",str);
printf("%s",str);
}
Run Code Online (Sandbox Code Playgroud)
但这有效吗?
int main(){
char str[] ="abcde";
scanf("%s",str);
printf("%s",str);
}`
Run Code Online (Sandbox Code Playgroud) #include <stdio.h>
#include <string.h>
int main(void){
char s1[30]="abcdefghijklmnopqrstuvwxyz";
printf("%s\n",s1);
printf("%s",memset(s1,'b',7));
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码有效,但是当我像这样创建 s1 数组时,
char *s1="abcdefghijklmnopqrstuvwxyz";
Run Code Online (Sandbox Code Playgroud)
它不会在编译时出现任何错误,但无法在运行时运行。
我正在使用 Visual Studio 2012。
你知道为什么吗?
我发现 memset 的原型是:
void *memset( void *s, int c, size_t n );
Run Code Online (Sandbox Code Playgroud)