标签: char-pointer

当我使用++时为什么会出现seg错误但是当我使用'1 +'时却没有?

请解释为什么我使用++运算符获得segfault.显式添加1和使用++运算符有什么区别?

using namespace std;
#include <iostream>

int main() {

  char* p = (char*) "hello";

  cout << ++(*p) << endl; //segfault
  cout << 1 + (*p) << endl; // prints 105 because 1 + 'h' = 105  

} 
Run Code Online (Sandbox Code Playgroud)

c++ operators segmentation-fault char-pointer

3
推荐指数
1
解决办法
90
查看次数

倾向于过度指针的迭代器?

这个问题是一个问题的一个问题,在这里有一个评论但被删除作为碰撞的一部分.

对于那些看不到删除的帖子的人来说,评论是关于我在这个答案中使用const char*s而不是string::const_iterators :"迭代器可能是一个更好的路径,因为它似乎正是你的指针似乎被处理."

所以我的问题是,迭代器是否持有string::const_iterators的任何内在价值,const char*以便将我的答案转换为string::const_iterators有意义?

c++ string iterator char-pointer const-pointer

3
推荐指数
1
解决办法
312
查看次数

为什么编译器在某些情况下只能隐式地将char*转换为std :: string

这些工作:

struct WithString {
  WithString(std::string){};
};

void takeString(std::string){}

//implicit conversions:
takeString("hello");
WithString("hello");
Run Code Online (Sandbox Code Playgroud)

但这不是:

WithString makeWithString() { return "hello";}

// error: no viable conversion from returned value of type 'const char [6]'...
Run Code Online (Sandbox Code Playgroud)

如果std::string在前两种情况下隐式转换为"hello" ,为什么不能在最后一种情况下呢?请注意,我没有将WithString构造函数指定为explicit,所以我希望这样的转换.

通过这样做,我可以让行为起作用:

struct WithString {
  WithString(std::string){};
  WithString(const char *){};
};
Run Code Online (Sandbox Code Playgroud)

我只是对这种奇怪感到好奇.如果我假定一个猜测,我会说这是因为前两个工作的情况下,转换之间const char *std::string,但在错误的情况下,这反而会需要2转换链,首先从const char *std::string,然后从std::stringWithString.也许这就是原因,但我不确定.

c++ stdstring object-construction implicit-conversion char-pointer

3
推荐指数
1
解决办法
485
查看次数

如何查找char**数组中的元素数量?

我有char**形式的字符串数组

我正在努力寻找该数组的长度:

typedef struct _stringArray
{
    int (*Length)(char**);
    char** (*Push)(char**, char*);
    char** (*Pop)(char**, char*);
}StringArray;

StringArray* StringArray_Constructor(void)
{
    StringArray* stringArray = (StringArray *)malloc(sizeof(StringArray));
    stringArray->Push = StringArray_Push;
    stringArray->Pop = StringArray_Pop;
}

char** StringArray_Push(char** array, char* string)
{
    int size = 0; //how to find how many elements in the array object???

    array = realoc(array, (sizeof(char *) * (size + 1));
    array[size] = string;
    return array;
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!谢谢.

c pointers char-pointer

2
推荐指数
1
解决办法
8947
查看次数

C++错误:初始化时无法将'char(*)[63]'转换为'char*'

我似乎比我原先想象的更像是C++中的菜鸟.就我对C/C++的了解而言,这应该有效.我定义了一个字符数组,然后尝试指定一个开头的指针......我做错了什么?

// Create character array
char str[] = "t xtd 02 1CF00400 08 11 22 33 44 55 66 77 88 0   0 1234.567890";
// Assign pointer to beginning of array
char* p = &str;
Run Code Online (Sandbox Code Playgroud)

c c++ pointers char char-pointer

2
推荐指数
2
解决办法
4633
查看次数

将char指针/数组传递给函数

我试图更多地了解C中的char指针,但有一件事让我感到兴奋.

假设我想将char指针传递给函数并更改指针所代表的值.一个例子如下:

int Foo (char *(&Msg1), char* Msg2, char* Msg3){
    char *MsgT = (char*)malloc(sizeof(char)*60);
    strcpy(MsgT,"Foo - TEST");
    Msg1 = MsgT; // Copy address to pointer
    strcpy(Msg2,MsgT); // Copy string to char array
    strcpy(Msg3,MsgT); // Copy string to char pointer
    return 0;
}

int main() {
    char* Msg1; // Initial char pointer
    char Msg2[10]; // Initial char array
    char* Msg3 = (char*)malloc(sizeof(char) * 10); // Preallocate pointer memory
    Foo(Msg1, Msg2, Msg3);
    printf("Msg1: %s\n",Msg1); // Method 1
    printf("Msg2: %s\n",Msg2); // Method 2 …
Run Code Online (Sandbox Code Playgroud)

c c++ pointers char char-pointer

2
推荐指数
1
解决办法
6966
查看次数

为什么编译器不抱怨将char添加到char*?

为什么c ++编译器不会抱怨以下代码?

#include<iostream>
int main()
{
    const char* p ="Hello";
    std::string q = p + 'H';
    std::cout << q << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

它正确地抛出了以下代码的错误

#include<iostream>
int main()
{
    const char* p ="Hello";
    std::string q = p + "World";
    std::cout << q << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

编译器抛出的错误语句

test.cxx: In function 'int main()':
test.cxx:5: error: invalid operands of types 'const char*' and 'const char [6]' to binary 'operator+'
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解,为什么第一个代码没有抛出任何错误声明?

c++ char-pointer

2
推荐指数
1
解决办法
82
查看次数

内存分配如何与字符指针(字符串文字、数组)一起使用?

目前正在阅读 K&R,刚刚偶然发现了 char 指针。rn这本书里没有提到定义char指针时的内存分配,也许后面会解释。但这没有意义,所以我正在寻求帮助:)

1

// No errors
char *name;
char *altname;
strcpy(altname,name);
Run Code Online (Sandbox Code Playgroud)

2

// No errors, internals of *name have been successfully moved to *altname
char *name = "HI";
char *altname;
strcpy(altname, name);
Run Code Online (Sandbox Code Playgroud)

3

// Segmentation fault, regardless of how I define *altname
char *name = "HI";
char *altname = "randomstring";
strcpy(altname, name);
Run Code Online (Sandbox Code Playgroud)

4

// Segmentation fault, regardless of how I define *altname
char *name;
char *altname = "     ";
strcpy(altname, name);
Run Code Online (Sandbox Code Playgroud)

5

// copies internals of *name only …
Run Code Online (Sandbox Code Playgroud)

c pointers char-pointer

2
推荐指数
1
解决办法
130
查看次数

char指针如何成为整个字符串?

假设我有以下字符串:

char *my_string = "Stack";
Run Code Online (Sandbox Code Playgroud)

据我所知,它char *保存了字符串第一个字符的内存地址"Stack".在计算机内存中,它可能表示如下:

 ------------------------
| S | t | a | c | k | \0|
 ------------------------
  ^
  my_string
Run Code Online (Sandbox Code Playgroud)

如果我打电话:printf("%s\n", my_string);,则打印整个字符串.编译器如何知道打印整个字符串?据我了解,它只有一个字符的地址.

c string pointers char char-pointer

1
推荐指数
2
解决办法
540
查看次数

字符串文字可以与 char* 连接吗?

我知道在 C 中相邻的字符串文字是连接在一起的。我想知道,相邻的字符串文字是否与 char*s 连接?

我问这个问题的原因是因为我想将两个字符串的串联传递给perror(),并且其中一个字符串事先未知,所以我必须使用char*.

perror("error opening " "file.txt");  // string literals are concatenated

char* filename = "file.txt";  // or some other file
perror("error opening " filename);    // will this work?
Run Code Online (Sandbox Code Playgroud)

c string-literals char-pointer

1
推荐指数
1
解决办法
253
查看次数