乐闻世界logo
搜索文章和话题

Reading a string with spaces with sscanf

5 个月前提问
4 个月前修改
浏览次数34

1个答案

1

在C语言中,sscanf 函数是用来从一个字符串中读取格式化输入的。通常情况下,sscanf在遇到空格时会停止读取,这是因为空格被视为字符串的默认分隔符。但是,如果你想要读取一个包含空格的字符串,你需要在格式字符串中使用特定的格式控制符。

例如,如果你有一个包含人的全名的字符串,并且名字之间有空格,你可以使用%[^\n]来读取整行直到遇到换行符,或者使用%[^\t]直到遇到制表符,或者更常见的用法是使用"%[^\"]"来读取直到另一个引号。这里的^是一个否定字符类的开始,意味着匹配除了指定字符之外的任何字符。

示例

假设我们有以下字符串,需要提取其中的名字和姓氏:

c
char info[] = "John Smith"; char firstName[100], lastName[100]; // 使用sscanf读取包含空格的字符串 sscanf(info, "%s %[^\n]", firstName, lastName); printf("First Name: %s\n", firstName); printf("Last Name: %s\n", lastName);

在这个示例中,%s会读取第一个单词 "John" 到 firstName 变量中。%[^\n]则会从第一个空格开始读取,直到遇到换行符,将剩下的部分 "Smith" 存储到 lastName 变量中。

注意,这里使用 %[^\n] 来确保可以读取包含空格的字符串。如果你只使用 %s,它将在读到空格时停止读取,因此你将只能得到"John"。

注意事项

  • 使用 %[...] 时要确保目标数组有足够的空间来存储预期的字符串,否则可能会导致缓冲区溢出。
  • 通常来说,为了安全起见,最好使用最大宽度(如 %99[^\n]),以避免因字符串太长而溢出缓冲区。
  • sscanf 的返回值可以用来检查输入操作的成功性,它返回成功读取的输入项的数量。

通过这种方式,你可以灵活地从字符串中提取包含空格的各种格式的数据。

2024年6月29日 12:07 回复

你的答案