c at()函数class string访问紫色的函数



此代码使我违反访问错误

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    string a;
    cin >> a;
    printf("%s",a.at(1));
    return 0;
}

我写这一行,因为此功能给了我一个较大程序的问题,我想弄清楚问题的确是什么...谢谢!

直接问题是"%s"需要指向C型字符串作为相应参数的指针。a.at(1)是一个字符,而不是指针,因此当误解为指针时,您的行为不确定。您要"%c"打印一个字符。

更一般的问题是使用非类型的C函数。在C 中,您可以使用Typesafe输出流:

cout << a.at(1);

std::string at返回char类型。使用%s格式指定符用于char类型,将为您提供不确定的行为 boom!

两件事:

1)在使用at访问元素之前,请检查字符串的大小:at(1)正在访问字符串的 second 字符,因为索引基于零。

2)在printf中使用正确的格式指定符:printf("%c", a.at(1))

at()不返回字符串,它返回字符。%s试图将该字符解释为(非常无效的)指针。

尝试:

printf("%c", a.at(1));

(假设a至少两个字符长)。

printf函数期望一个char指针,然后给出一个字符。炭值被解释为地址,这是错误的。

如果您只想打印一个字符,请使用:

printf("%c", a.at(1))

提供您的字符串至少2个字符。

最新更新