相关疑难解决方法(0)

char s []和char*s有什么区别?

在C中,可以在声明中使用字符串文字,如下所示:

char s[] = "hello";
Run Code Online (Sandbox Code Playgroud)

或者像这样:

char *s = "hello";
Run Code Online (Sandbox Code Playgroud)

那么区别是什么呢?我想知道在编译和运行时的存储持续时间实际发生了什么.

c string constants char

495
推荐指数
6
解决办法
33万
查看次数

为什么在写入用"char*s"而不是"char s []"初始化的字符串时会出现分段错误?

以下代码在第2行接收seg错误:

char *str = "string";
str[0] = 'z';  // could be also written as *str = 'z'
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

虽然这非常有效:

char str[] = "string";
str[0] = 'z';
printf("%s\n", str);
Run Code Online (Sandbox Code Playgroud)

经过MSVC和GCC测试.

c c-strings segmentation-fault

277
推荐指数
10
解决办法
7万
查看次数

如何在C或C++中反转字符串?

如何在C或C++中反转字符串而不需要单独的缓冲区来保存反向字符串?

c c++ string reverse

170
推荐指数
13
解决办法
31万
查看次数

字符数组的文字字符串初始值设定项

在以下规则中,当数组衰减到指针时:

左值[见2.5问题]型阵列的-T出现在表达衰变(有三个例外)转换成一个指向它的第一个元素的; 结果指针的类型是指向T的指针.

(例外情况是,当阵列是的sizeof或&运算符的操作数,或为字符数组一个文本字符串初始化.)

如何理解数组是"字符数组的文字字符串初始值设定项"的情况?请举个例子.

谢谢!

c arrays string pointers c99

34
推荐指数
3
解决办法
9740
查看次数

反向C风格的字符串? - C++

我想使用指针来反转C++中的char数组.我想知道是否有什么我应该采取不同的做法?我这样做了吗?有没有更有效的方法来实现这一目标?

我的小程序:

int main ( )
{
    char buffer[80];

    PrintHeader();

    cout << "\nString reversal program";
    cout << "\nType in a short string of words.";
    cout << "\nI will reverse them.";
    cout << "\n:";
    cin.getline(buffer, 79);

    cout << "\nYou typed " << buffer;
    reverse (buffer);
    cout << "\nReversed: " << buffer;

    cout << endl;
    system("PAUSE");
    return 0;

}


void reverse(char* string)
{
    char* pStart, *pEnd;
    int length;
    char temp;

    length = strlen(string);

    pStart = string;
    pEnd = &string[length - 1];

    while(pStart …
Run Code Online (Sandbox Code Playgroud)

c++ arrays pointers

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

字符串反向程序抛出异常

// ExampleCodes.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<stdio.h>
#include<iostream>
using namespace std;    

char* stringReverse(char* s)    
{    

    char temp, *p,*q;    
    q = s;    
    while( *(++q));    
    for( p = s; p &lt; --q; p++)    
    {    
        temp = *p;    
        *p = *q;     
        *q = temp;    
    }    
    return s;    
}    


int _tmain(int argc, _TCHAR* argv[])    
{    

    stringReverse("StringReverse");    
    return 0;    
}    
Run Code Online (Sandbox Code Playgroud)

c++

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

是否可以编写一个可以在不使用缓冲区字符串的情况下反转字符串的函数?

可能重复:
如何使用指针反转c中的字符串?

面试问题是编写一个函数,调用revstr该函数可以获取字符串并反转它而不使用缓冲区字符串,即涉及指针.我该怎么做呢?

c

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

C中的字符串差异

可能重复:
修改C字符串常量?

使用malloc时char*str有什么区别?

int i;
char *s =  (char*)malloc(sizeof(char)*27); 
for(i=0;i<26;i++)
  s[i]='a'+i;
s[26]='\0';
printf("%s\n",s);
reverse(s);
printf("%s\n",s);
Run Code Online (Sandbox Code Playgroud)

其中reverse()是

void reverse(char *str)
{
  int i,j=strlen(str)-1;
  char tmp;
  for(i=0;i<j;i++,j--)
  {
    tmp=str[i];
    str[i]=str[j];
    str[j]=tmp;
  }   
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但使用时

char *t = "new string";
printf("%s\n",t);
reverse(t);
printf("%s\n",t);
Run Code Online (Sandbox Code Playgroud)

我得到一个段错误,调试器说它是反向的strlen.将char*t更改为char t []可以正常工作.是什么赋予了?

c string pointers

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

标签 统计

c ×6

string ×4

c++ ×3

pointers ×3

arrays ×2

c-strings ×1

c99 ×1

char ×1

constants ×1

reverse ×1

segmentation-fault ×1